2

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

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

有没有办法选择库中的某些函数作为导出函数,并使库中的其余函数对外部调用不可见?

4

2 回答 2

3

您可能想要使用 GCC 的可见性函数属性

请参阅GCC 可见性维基页面并阅读Drepper 的论文 如何编写共享库

于 2013-11-14T06:01:07.317 回答
1

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

要么使用 Basiles 答案中提到的可见性函数属性,要么使用链接器版本脚本来完成这项工作。

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

文件:MyLinkerScript.exp

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

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

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

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

于 2013-11-14T06:21:40.803 回答