关于Linux中的共享库,有没有办法在库中选择导出函数?

时间:2013-11-14 05:36:15

标签: c++ c linux shared-libraries

我在这里阅读教程: http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/

在我看来,Windows平台中没有像dllexport DLL这样的功能。

是否有某种方法可以选择库中的某些功能作为导出功能,并使库中的其余功能对外部调用保持不可见?

2 个答案:

答案 0 :(得分:3)

您可能想要使用GCC的visibility function attribute

请参阅GCC visibility wikipage并阅读Drepper's paper 如何编写共享库

答案 1 :(得分:1)

有多种方法可以做到这一点。

使用Basiles中提到的visibility函数属性回答或使用链接器版本脚本来完成这项工作。

在链接描述文件中,列出要导出的所有功能。这是一个例子:

文件:MyLinkerScript.exp

{
global: 
  myExportedFunction1;
  myExportedFunction2;
  myExportedFunction3;
local: *;
};

在共享库的链接步骤中,您只需将以下额外参数传递给gcc:

-Wl,--version-script=MyLinkerScript.exp

之后,除了版本脚本的全局部分中列出的符号外,共享库中的所有符号都将是私有的。