关于 Linux 中的共享库,有没有办法在库中选择导出函数?
Posted
技术标签:
【中文标题】关于 Linux 中的共享库,有没有办法在库中选择导出函数?【英文标题】:About shared library in Linux, is there a way to select export functions in a library? 【发布时间】:2013-11-14 05:36:15 【问题描述】:我在这里阅读了教程: http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/
在我看来,Windows 平台上没有类似dllexport
的 DLL 的功能。
有没有办法选择库中的某些函数作为导出函数,并使库中的其余函数对外部调用不可见?
【问题讨论】:
看看Visibility 【参考方案1】:您可能想使用 GCC 的 visibility function attribute。
查看GCC visibility wikipage 并阅读Drepper's paper 如何编写共享库
【讨论】:
【参考方案2】:有多种方法可以做到这一点。
要么使用 Basiles 答案中提到的可见性函数属性,要么使用链接器版本脚本来完成这项工作。
在链接描述文件中,您列出了所有要导出的函数。这是一个例子:
文件:MyLinkerScript.exp
global:
myExportedFunction1;
myExportedFunction2;
myExportedFunction3;
local: *;
;
在共享库的链接步骤中,您只需将以下额外参数传递给 gcc:
-Wl,--version-script=MyLinkerScript.exp
之后,共享库中的所有符号都将是私有的,但版本脚本的全局部分中列出的符号除外。
【讨论】:
以上是关于关于 Linux 中的共享库,有没有办法在库中选择导出函数?的主要内容,如果未能解决你的问题,请参考以下文章