2013-03-28 27 views
1

當我從源文件「secret.cc」建立一個共享庫「mylib.so」,所得到的共享對象包含源文件名:除去嵌入的源文件名

... do_global_ctors_aux^@ secret.cc^@ __ DTOR_END ...

但我不想將該文件的名稱(「secret.cc」)泄露給我的圖書館的用戶。有沒有辦法從共享對象中去除文件名信息,或者阻止它首先被插入?

回答

3

這很簡單:不要讓編譯器從一開始就知道源的文件名。取而代之的

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++明確,錯誤消息顯然將不包含文件名了,並有一個額外的警告:當你的源代碼包含相對包括,即包含引號(#include "foo.hpp")而不是尖括號(#include <foo.hpp>),這些將不再起作用,因爲編譯器無法引用文件的目錄,只能看到來自管道的字節流。