C++ 使用.def或_declspec(dllexport)导出跨平台代码的共享库符号?
如何正确导出共享库符号(用于从Visual Studio中的客户端代码链接),同时确保代码是跨平台的?特别是使用.def是推荐的方式,还是应该为u declspec(dllexport)使用特定于平台的宏?如果应该使用宏,您能给出一个跨平台友好的示例吗C++ 使用.def或_declspec(dllexport)导出跨平台代码的共享库符号?,c++,visual-studio-2010,cross-platform,cmake,C++,Visual Studio 2010,Cross Platform,Cmake,如何正确导出共享库符号(用于从Visual Studio中的客户端代码链接),同时确保代码是跨平台的?特别是使用.def是推荐的方式,还是应该为u declspec(dllexport)使用特定于平台的宏?如果应该使用宏,您能给出一个跨平台友好的示例吗 < >我有一些本地C++代码用于跨平台使用,并使用CGuto生成.SLN/.VCXPRJ文件,该文件创建了用于Windows中的DLL文件。要从C++/CLI包装器(也是dll)链接到此dll,我需要有.lib,它需要导出符号。我了解到我需要使用
< >我有一些本地C++代码用于跨平台使用,并使用CGuto生成.SLN/.VCXPRJ文件,该文件创建了用于Windows中的DLL文件。要从C++/CLI包装器(也是dll)链接到此dll,我需要有.lib,它需要导出符号。我了解到我需要使用u declspec(dllexport)或.def文件。我担心的是我不想用MSVC的东西来缓和共享代码(我们需要支持Linux、iOS、Mac OSX、Android……。SethCarnegie的链接gcc.gnu.org/wiki/Visibility可能是对这个问题的间接回答。简言之,我决定使用宏(预处理器符号),这似乎在跨平台进行一些规划时效果良好。虽然.def与代码分离,但没有相应的导入方法,即我仍然需要使用_declspec(dllimport)——在IMO中不是很干净
如果您是这个主题的新手(跨平台,使用托管代码的非托管C++),您可以看到我在这里做的例子(请参阅问题部分):
你看到了吗?你已经回答了这个问题。您可以使用.def文件定义导出(不影响源代码),或者在不重要的情况下向源代码添加注释。你的选择!我不确定在这种情况下.def是否是正确的方法。我可以导出函数。对于导出类,我需要使用有问题的损坏名称:@SethCarnegie谢谢!这个链接确实让我对这个符号导出/导入主题有了更多的了解。