当我从源文件“secret.cc”构建共享库“mylib.so”时,生成的共享对象包含源文件名:
... do_global_ctors_aux^@secret.cc ^ @ __ DTOR_END ...
但我不想将该文件的名称(“secret.cc”)泄露给我的图书馆的用户。有没有办法从共享对象中剥离文件名信息,或者防止它首先被插入?
答案 0 :(得分: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++
,错误消息显然不再包含文件名,还有一个额外的警告:当您的源包含相对包含时,即包含在引号中({{1而不是尖括号(#include "foo.hpp"
),那些将不再起作用,因为编译器无法引用文件的目录,它只是从管道中看到一个字节流。