猿问

链接共享库时限制符号的可见性

某些平台要求您为链接程序提供共享库的外部符号列表。但是,在大多数unixish系统上,这不是必需的:默认情况下,所有非静态符号都将可用。

我的理解是,GNU工具链可以选择性地将可见性限制为明确声明的符号。如何使用GNU ld来实现?


慕后森
浏览 548回答 3
3回答

潇湘沐

我认为最简单的方法是将-fvisibility=hiddengcc选项添加到gcc选项中,并在代码中显式公开某些符号的可见性(by __attribute__((visibility("default"))))。请参阅此处的文档。可能有一种方法可以通过ld链接程序脚本来实现,但是我对此并不了解。

慕的地8271018

生成的用于调用任何导出的函数或使用任何导出的全局代码的代码比未导出的代码效率低。有一个额外的间接级别。这适用于在编译时可能导出的任何函数。gcc仍会为链接器脚本以后未导出的函数产生额外的间接调用。因此,使用可见性属性将产生比链接脚本更好的代码。
随时随地看视频慕课网APP
我要回答