如果不修改库本身,我认为这是不可能的。我猜它是关于一个静态库(在 dll 中,被覆盖的 new/delete 将由 dll 中的函数指向。)
您可以使用以下命令(可视命令提示符)从静态库中删除 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
will 包含每个符号的错位名称和该符号所在的 obj 的标识符。例如
14286 ?_Rank@?$_Arithmetic_traits@C@std@@2HB
14286
告诉你符号所在的 obj '标识符' 。如果您在查找新/删除时遇到问题,可以运行:
DUMPBIN /SYMBOLS input.lib > sym.txt
它将刷新到sym.txt
每个符号的损坏和未损坏名称中。
最后,使用上面的命令删除 obj 文件,在我们的示例中LIB
替换obj_to_remove
为compilation.dir\objfile1.obj
,并链接到removed.lib
.
现在,如果您不走运,您需要的其他符号可能与 new/delete 位于同一目标文件中。在这种情况下,您可以使用类似这样的方式“破解”库(例如重命名new
为dew
和。)delete
nelete