c++ - 从共享库中删除嵌入的源文件名

标签 c++ shared-libraries

当我从源文件“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/

相关文章:

python - 带有 SVM、EM 和其他方法的库,类似 "weights per sample"

c++ - 在 a() 中加入在先前调用 a() 时创建的线程。这可能吗?

c++ - C++中一系列数字的组合

c++ - 动态加载共享库时出现 undefined symbol 错误

c++ - 访问命名空间中的枚举

linux - Valgrind:无法加载可执行程序的共享库

c++ - "Adding"功能共享对象?

c++ - gcc -fPIC 与 -shared

c++ - 当两个共享库定义相同的符号时实际发生了什么?

c++ - 使用带有 fstream 的映射的段错误