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++明确提供,错误消息显然不再包含文件名,并且还有一个额外的警告:当您的源包含相对包含时,即包含在引号 ( #include "foo.hpp") 而不是尖括号 ( #include <foo.hpp>) 中,那些将不会更长的工作时间,因为编译器无法引用文件的目录,它只看到来自管道的字节流。

于 2013-03-28T18:01:03.387 回答