1

ソースファイル「secret.cc」から共有ライブラリ「mylib.so」をビルドすると、結果の共有オブジェクトにはソースファイル名が含まれます。

... do_global_ctors_aux^@secret.cc^@__DTOR_END ...

しかし、そのファイルの名前 (「secret.cc」) をライブラリのユーザーに漏らしたくありません。共有オブジェクトからファイル名情報を削除する方法、または最初から挿入されないようにする方法はありますか?

4

1 に答える 1

4

それは非常に簡単です。最初からソースのファイル名をコンパイラに知らせないでください。それ以外の

g++ -std=c++11 -O3 -Wall -c my_source.cc -o my_source.o

これを行う:

cat my_source.cc | g++ -std=c++11 -O3 -Wall -c -x c++ - -o my_source.o

明示的に指定する必要があることに注意してください-x c++。エラー メッセージには明らかにファイル名が含まれなくなり、追加の警告が 1 つあります。ソースに相対インクルードが含まれている場合、つまり、山#include "foo.hpp"かっこ (#include <foo.hpp>コンパイラはファイルのディレクトリを参照できず、パイプからのバイトストリームを参照するだけなので、作業に時間がかかります。

于 2013-03-28T18:01:03.387 に答える