如何在确保代码是跨平台的同时正确导出共享库符号(用于从Visual Studio中的客户端代码进行链接)?具体是使用.def推荐的方式还是我应该为__declspec(dllexport)使用特定于平台的宏?如果应该使用宏,你能给出一个跨平台友好的例子吗?
我有一些用于跨平台使用的本机C代码,并使用Cmake生成.sln / .vcxproj文件,该文件创建.dll文件以供在Windows中使用.要从C/C++LI包装器(也是一个dll)链接到这个dll,我需要有.lib,它需要导出符号.我了解到我需要使用__declspec(dllexport)或.def文件.我担心的是我不想用MSVC来缓和共享代码(我们需要支持Linux,iOS,Mac OSX,Android ……).
最佳答案 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