1

あるシンボルを宣言するサードパーティのヘッダーファイルをインクルードする必要がある.cppファイルがあるとします(これを呼び出しましょうdiv)。このシンボルは必要ありませんが、独自のdivシンボルを定義する必要があります。ただし、元のシンボルはヘッダーファイルの他の部分で使用されている可能性があります。undefグローバル名前空間(マクロの実行に似たもの)からシンボルを削除することは可能ですか?

私はこのようなものが欲しい:

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

オプション付きのgcc-4.7/clangを使用してコンパイルし-std=c++11ます。

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 に答える