我在这里阅读了教程: http ://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/
dllexport
在我看来,Windows 平台中没有像 DLL 这样的功能。
有没有办法选择库中的某些函数作为导出函数,并使库中的其余函数对外部调用不可见?
我在这里阅读了教程: http ://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/
dllexport
在我看来,Windows 平台中没有像 DLL 这样的功能。
有没有办法选择库中的某些函数作为导出函数,并使库中的其余函数对外部调用不可见?
您可能想要使用 GCC 的可见性函数属性。
请参阅GCC 可见性维基页面并阅读Drepper 的论文 如何编写共享库
有多种方法可以做到这一点。
要么使用 Basiles 答案中提到的可见性函数属性,要么使用链接器版本脚本来完成这项工作。
在链接描述文件中,您列出了所有要导出的函数。这是一个例子:
文件:MyLinkerScript.exp
{
global:
myExportedFunction1;
myExportedFunction2;
myExportedFunction3;
local: *;
};
在共享库的链接步骤中,您只需将以下额外参数传递给 gcc:
-Wl,--version-script=MyLinkerScript.exp
之后,共享库中的所有符号都将是私有的,除了版本脚本的全局部分中列出的符号。