1

假设我有一个.cpp文件,我必须在其中包含一个声明某个符号的第三方头文件(我们称之为div)。我不需要这个符号,但我需要定义我自己的div符号。但是,原始符号可能会被头文件的其他部分使用。是否可以从全局命名空间中删除符号(类似于undefing 宏)?

我想要这样的东西:

#include <string> //stdlib.h defines div symbol
//do some symbol removal magic here
std::string div;

-std=c++11使用带有选项的 gcc-4.7/clang 进行编译。

4

3 回答 3

8

您不能从定义符号的命名空间(包括全局命名空间)中删除符号。

将您自己的包装div在您自己的命名空间中。

于 2012-10-24T10:46:37.957 回答
5

基本上,没有

但是正如其他人所说,您可以使用命名空间来获得与实际上本质上完全不同的符号相同的效果。

于 2012-10-24T10:52:04.820 回答
1

我从未使用过它,但您可以尝试使用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
于 2012-10-24T12:59:04.473 回答