我不认为这是可能的,不修改库本身。我想它是关于一个静态库(在一个dll中,重写的新/删除将由dll中的函数指向)。
可以使用命令(Visual命令)从静态库中删除obj文件提示):
LIB /REMOVE:obj_to_remove /OUT:removed.lib input.lib
要找出OBJ删除,首先运行:
DUMPBIN /ARCHIVEMEMBERS input.lib
你会看到线,如
Archive member name at 14286: /0 compilation.dir\objfile1.obj
14286
'标识'obj文件。要查看每个符号的位置,请执行:
DUMPBIN /LINKERMEMBER:1 input.lib > members.txt
并寻找新的/删除。 members.txt
将包含每个符号的重叠名称和该符号所在的obj的标识符。例如
14286 [email protected][email protected]@[email protected]@2HB
的14286
告诉你obj的“标识”,其中的符号所在。如果你很难找到新/删除,你可以运行:
DUMPBIN /SYMBOLS input.lib > sym.txt
将水冲到sym.txt
每个符号的错位和未重整的名称。
在结束时,通过在我们的例子由compilation.dir\objfile1.obj
替换obj_to_remove
删除与LIB
命令OBJ文件的上方,并且针对removed.lib
链路。
现在,如果你不幸运,你需要的其他符号可能与新/删除在同一个目标文件中。在这种情况下,你可以在“黑客”使用类似this的lib(比如重命名new
到dew
和delete
至nelete
)
答案将取决于平台和/或编译器上。 – atzz
你们开发这两个图书馆还是他们的第三方?如果你是在控制内存管理代码,我会偏离重写新/删除,并创建一个*内存管理对象*风格的'std :: tr1 :: shared_ptr'。 – count0
@ count0我们开发了内存管理器库。这是一个具有高度优化的垃圾收集器的自定义内存管理器。我正在尝试使用boost测试库进行单元测试。 – ProgrammerAtWork