linux 静态库指定导出符号前缀
在 Linux 中,可以通过使用编译器选项 -fvisibility=hidden 来指定隐藏所有未显式导出的符号,然后通过使用编译器选项 -Wl,--exclude-libs,ALL 来排除所有动态链接库中的符号。这样就能够确保只有显式导出的符号才会被链接到静态库中。
如果需要指定导出符号的前缀,可以使用编译器选项 -Wl,--version-script=<file> 来指定一个版本脚本文件,该文件包含了需要导出的符号以及其前缀。版本脚本文件的格式如下:
LIBRARY {
global:
<prefix>symbol1;
<prefix>symbol2;
local:
*;
};
其中 LIBRARY 是关键字,global 和 local 分别表示需要导出的符号和不需要导出的符号。<prefix> 是符号前缀,symbol1 和 symbol2 是需要导出的符号名。
例如,如果需要将所有以 mylib_ 为前缀的符号导出到静态库中,可以创建一个名为 mylib.map 的版本脚本文件,其内容如下:
LIBRARY {
global:
mylib_*;
local:
*;
};
然后在编译静态库时使用以下命令:
gcc -fvisibility=hidden -c mylib.c
ar rcs libmylib.a mylib.o
gcc -shared -o libmylib.so mylib.o -Wl,--version-script=mylib.map
这样就能够生成一个名为 libmylib.a 的静态库,其中只包含以 mylib_ 为前缀的符号,而其他符号都被隐藏了
原文地址: https://www.cveoy.top/t/topic/eE6X 著作权归作者所有。请勿转载和采集!