clang++
次のコマンドラインコマンド(行に分割)を使用して、を使用してC++プロジェクトをビルドします。
clang++
-std=c++11
-W -Wall -Wextra -pedantic -Wno-newline-eof -Werror
-O4
-I<dirs>
-L<dirs>
-l<libs>
-framework <frameworks>
-D <defs>
-o <filename>
<files>
ただし、を実行すると、コマンドラインにあるstrings <filename>
にもかかわらず、いくつかのクラス名が表示されます。llvmにすべてのシンボルを削除するように指示する必要があるものを-O4
試しましたが、これらは削除されません。-Wl,-s
表示されるクラス名には、共通点が1つあるようです。それは、vtableがあるということです。これらのクラスの1つは次のとおりです。
class MyClass {
public:
virtual void myFunc() = 0;
};
シンボルとして表示されます:
N9namespace7MyClassE
名前空間とクラス名が最終ファイルに表示されるのは気に入らない。これらを取り除くにはどうすればよいですか?私のバイナリはコマンドラインユーティリティなので、main
関数のみをエクスポートする必要があります。
(@nmで提案されているように)提供した後でも-fno-rtti
、次のようないくつかの名前が残っています。
__ZN15MyClassInstance6myFuncEv
(MyClassInstanceは上記のMyClassのサブクラスです)
さらに、グローバル変数の名前もバイナリに含まれています。