链接 elf 应用程序和共享库时选择导出的符号
choose exported symbols when linking an elf application and shared library
在链接精灵应用程序或共享库时,我想选择要导出的符号。默认情况下,链接应用程序时不导出函数符号,链接共享库时导出所有函数符号。有什么方法可以控制要导出的符号吗?链接应用程序时,我可以使用 -rdynamic
或 -Wl,--export-dynamic
获取所有符号,我可以使用 -Wl,--dynamic-list <symfile>
仅获取部分符号。但是,在链接库时,是否会忽略这些选项?
Is there any way to control which symbols to export?
控制共享库中符号可见性的常用方法是
- 使用链接描述文件,如here或
所述
- 在您明确要导出的符号上使用
__attribute__((visibility("default")))
并使用 -fvisibility=hidden
构建(这将隐藏其他所有内容)。
稍微测试了一下发现:
对于ELF应用,可以使用-rdynamic
或-Wl,--export-dynamic
导出所有符号,也可以在链接时使用-Wl,--dynamic-list <sym-file>
仅导出部分符号通过 gcc
.
申请
对于 ELF 库,不能使用 -rdynamic
、-Wl,--export-dynamic
或 -Wl,--dynamic-list <symfile>
,必须在通过链接库时使用 -Wl,--version-script=<verfile>
gcc
.
version-script 和 sym-file 几乎相同,除了 sym-file 您不需要编写版本和范围。文档:gnu ld
在链接精灵应用程序或共享库时,我想选择要导出的符号。默认情况下,链接应用程序时不导出函数符号,链接共享库时导出所有函数符号。有什么方法可以控制要导出的符号吗?链接应用程序时,我可以使用 -rdynamic
或 -Wl,--export-dynamic
获取所有符号,我可以使用 -Wl,--dynamic-list <symfile>
仅获取部分符号。但是,在链接库时,是否会忽略这些选项?
Is there any way to control which symbols to export?
控制共享库中符号可见性的常用方法是
- 使用链接描述文件,如here或 所述
- 在您明确要导出的符号上使用
__attribute__((visibility("default")))
并使用-fvisibility=hidden
构建(这将隐藏其他所有内容)。
稍微测试了一下发现:
对于ELF应用,可以使用
-rdynamic
或-Wl,--export-dynamic
导出所有符号,也可以在链接时使用-Wl,--dynamic-list <sym-file>
仅导出部分符号通过gcc
. 申请
对于 ELF 库,不能使用
-rdynamic
、-Wl,--export-dynamic
或-Wl,--dynamic-list <symfile>
,必须在通过链接库时使用-Wl,--version-script=<verfile>
gcc
.
version-script 和 sym-file 几乎相同,除了 sym-file 您不需要编写版本和范围。文档:gnu ld