linux和macOS的局部符号可以用strip去掉,但全局符号不可以,以下为去掉(或保留)全局符号的方法
Linux
加入编译选项:
"-Wl,--retain-symbols-file=retain.txt -Wl,--version-script=symver.txt"
示例1:去掉所有符号
symver.txt内容:
{
local: *;
};
retain.txt内容(空):
示例2:保留部分符号
symver.txt内容:
{
global:
function1;
function2;
local: *;
};
retain.txt内容:
function1
function2
macOS
对于执行程序,若要去除所有符号,直接:
strip <filename>
对于动态库dylib,加入编译选项:
"-Wl,-exported_symbols_list export.txt"
export.txt内容:
_function1
_function2
注:这是符号名,不是原函数名,可以使用nm工具查看函数对应的符号