首页 文章

使用.def或__declspec(dllexport)导出跨平台代码的共享库符号?

提问于
浏览
4

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

我有一些用于跨平台使用的本机C代码,并使用Cmake生成.sln / .vcxproj文件,该文件创建.dll文件以供在Windows中使用 . 要从C / CLI包装器(也是一个dll)链接到这个dll,我需要有.lib,这需要导出符号 . 我了解到我需要使用__declspec(dllexport)或.def文件 . 我担心的是我不想用MSVC来缓和共享代码(我们需要支持Linux,iOS,Mac OSX,Android ......) .

1 回答

  • 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

相关问题