假设我有一个.cpp
文件,其中我必须包括一个第三方标题文件,该文件声明一些符号(我们称其为 div
)。我不需要此符号,但是我需要定义自己的div
符号。但是,标题文件的其他部分可以使用原始符号。是否可以从全局名称空间中删除符号(类似于undef
宏)?
我想要这样的东西:
#include <string> //stdlib.h defines div symbol
//do some symbol removal magic here
std::string div;
使用-std=c++11
选项使用GCC-4.7/Clang进行编译。
您无法从定义的名称空间中删除符号(包括全局名称空间)。
将自己的div
包装在您自己的名称空间中。
基本上, no 。
但是,正如其他人所说的那样,您可以使用名称空间来获得相同的效果,而实际上实际上是完全不同的符号。
我从未使用过它,但是您可以尝试使用gnu objcopy(如https://stackoverflow.com/a/1950629/721929中所建议)。
,但我认为如果您控制了源代码,这是可以避免的。测试是否有效,现在是昂贵的。
--redefine-sym old=new
Change the name of a symbol old, to new. This can be useful when one is
trying link two things together for which you have no source,
and there are name collisions.
objcopy --redefine-sym oldNew=newNew libBlue.a