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工具查看函数对应的符号