链接elf应用程序和共享库时选择导出的符号

时间:2016-01-14 13:43:18

标签: linker elf

链接elf应用程序或共享库时,我想选择要导出的符号。默认情况下,链接应用程序时不会导出任何函数符号,并且在链接共享库时,将导出所有函数符号。有没有办法控制导出哪些符号?链接应用程序时,我可以使用-rdynamic-Wl,--export-dynamic来获取所有符号,我可以使用-Wl,--dynamic-list <symfile>来获取一些符号。但是,在链接库时,这些选项是否被忽略?

2 个答案:

答案 0 :(得分:1)

  

有没有办法控制要导出的符号?

控制共享库中符号可见性的常用方法是

  1. 使用链接描述文件,如here
  2. 所述
  3. 对您明确要使用__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