Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用.def或_declspec(dllexport)导出跨平台代码的共享库符号?_C++_Visual Studio 2010_Cross Platform_Cmake - Fatal编程技术网

C++ 使用.def或_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,它需要导出符号。我了解到我需要使用

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


< >我有一些本地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谢谢!这个链接确实让我对这个符号导出/导入主题有了更多的了解。