ソースファイル「secret.cc」から共有ライブラリ「mylib.so」をビルドすると、結果の共有オブジェクトにはソースファイル名が含まれます。
... do_global_ctors_aux^@secret.cc^@__DTOR_END ...
しかし、そのファイルの名前 (「secret.cc」) をライブラリのユーザーに漏らしたくありません。共有オブジェクトからファイル名情報を削除する方法、または最初から挿入されないようにする方法はありますか?
ソースファイル「secret.cc」から共有ライブラリ「mylib.so」をビルドすると、結果の共有オブジェクトにはソースファイル名が含まれます。
... do_global_ctors_aux^@secret.cc^@__DTOR_END ...
しかし、そのファイルの名前 (「secret.cc」) をライブラリのユーザーに漏らしたくありません。共有オブジェクトからファイル名情報を削除する方法、または最初から挿入されないようにする方法はありますか?
それは非常に簡単です。最初からソースのファイル名をコンパイラに知らせないでください。それ以外の
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>
コンパイラはファイルのディレクトリを参照できず、パイプからのバイトストリームを参照するだけなので、作業に時間がかかります。