C 移动/删除符号

C++ move/remove symbol

本文关键字:符号 删除 移动      更新时间:2023-10-16

假设我有一个.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