如何通过版本脚本为所有导出符号加版本且不修改可见性?
GNU链接脚本:批量为所有导出符号分配版本
你用的这个写法VERS_1.1 { *; };完全有效,就是用来给所有默认导出的符号统一分配版本的。
为啥这个写法管用
GNU链接器的版本脚本规则里,版本块内的*是通配符,会匹配所有默认可见(即原本会被导出)的符号。不需要把每个符号都列出来,就能把它们全部归到指定的版本VERS_1.1下。
怎么确认效果
编译链接后,用readelf -sW 你的库文件名或者objdump -T 你的库文件名查看符号表,所有导出符号的版本字段应该都显示为VERS_1.1,这样就说明生效了。
进阶用法:排除特定符号
如果有个别符号不想分配这个版本或者要隐藏,可以在版本块里加local:指令来排除,比如:
VERS_1.1 { *; local: foo; bar; };
这样除了foo和bar会被设为局部符号(不导出),其他所有导出符号都会带上VERS_1.1版本。
内容的提问来源于stack exchange,提问作者Dan M.
相关产品推荐
相关产品推荐

