2012-07-17 55 views
4

如何正确导出共享库符号(用于从Visual Studio中的客户端代码进行链接),同时确保代码是跨平台的?具体是使用.def推荐的方式,还是应该使用__declspec(dllexport)平台特定的宏?如果应该使用宏,你能举一个跨平台友好的例子吗?使用.def或__declspec(dllexport)为跨平台代码导出共享库符号?

我有一些跨平台使用的本机C++代码,并使用Cmake生成.sln/.vcxproj文件,该文件创建用于Windows的.dll文件。要从C++/CLI包装器(也是一个DLL)链接到此DLL,我需要.lib,它需要导出符号。我知道我需要使用__declspec(dllexport)或.def文件。我的担忧是我不想用MSVC的东西来调节共享代码(我们需要支持Linux,iOS,Mac OSX,Android ...)。

+3

你见过http://gcc.gnu.org/wiki/Visibility – 2012-07-17 16:47:56

+0

你已经回答了这个问题。您可以使用.def文件来定义导出(不考虑源代码),或者如果注释不重要,可以向源添加注释。你的选择! – 2012-07-17 18:21:47

+0

我不确定在这种情况下.def是否正确。我可以导出函数。对于导出类,我需要使用具有其关注的mangled名称:http://stackoverflow.com/questions/186232/exporting-dll-c-class-question-about-def-file – 2012-07-17 19:27:21

回答

2

SethCarnegie的链接gcc.gnu.org/wiki/Visibility可能是对这个问题的间接回答。总之,我决定使用宏(预处理器符号),这看起来对于具有一些计划的跨平台很适用。虽然.def从代码中分离出来,但是没有相应的导入方式,即我仍然需要使用__declspec(dllimport) - 不是很干净的IMO。

如果你是新来这个主题(跨平台,使用非托管C++托管代码)和我一样,你可以看到我做了什么来作为例子(见问题部分): Link error linking from managed to unmanaged C++ despite linking to .lib file with exported symbols

相关问题