当我从源文件“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++
明确地,错误消息显然不再包含文件名并且还有一个额外的警告:当您的源包含相对包含时,即包含在引号中( #include "foo.hpp"
)而不是尖括号( #include <foo.hpp>
),那些将不会由于编译器无法引用文件的目录,因此工作时间更长,它只能看到来自管道的字节流。
关于c++ - 从共享库中删除嵌入的源文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688434/