链接elf应用程序或共享库时,我想选择要导出的符号。默认情况下,链接应用程序时不会导出任何函数符号,并且在链接共享库时,将导出所有函数符号。有没有办法控制导出哪些符号?链接应用程序时,我可以使用-rdynamic
或-Wl,--export-dynamic
来获取所有符号,我可以使用-Wl,--dynamic-list <symfile>
来获取一些符号。但是,在链接库时,这些选项是否被忽略?
答案 0 :(得分:1)
有没有办法控制要导出的符号?
控制共享库中符号可见性的常用方法是
__attribute__((visibility("default")))
导出和构建的符号使用-fvisibility=hidden
(这将隐藏其他所有内容)。答案 1 :(得分:1)
经过测试后发现:
对于ELF应用程序,您可以使用-rdynamic
或-Wl,--export-dynamic
导出所有符号,也可以在通过{{链接应用程序时使用-Wl,--dynamic-list <sym-file>
仅导出某些符号1}}。
对于ELF库,您无法使用gcc
,-rdynamic
或-Wl,--export-dynamic
,在通过{{1}链接您的库时必须使用-Wl,--dynamic-list <symfile>
}。
版本脚本和sym文件几乎相同,只是对于sym文件,您不编码版本和范围。文档:gnu ld