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

标签 c++ visual-studio-2010 cross-platform cmake

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

我有一些用于跨平台使用的 native C++ 代码,并使用 Cmake 生成 .sln/.vcxproj 文件,该文件创建用于 Windows 的 .dll 文件。要从 C++/CLI 包装器(也是一个 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

关于c++ - 使用 .def 或 __declspec(dllexport) 导出跨平台代码的共享库符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527088/

相关文章:

visual-studio-2010 - MSBuild 预清理自定义

c++ - 如何使智能指针在 exit() 时超出范围

android - 错误消息 : The "ConvertResourcesCases" task failed unexpectedly

git - 如何检查 Git 中的凭证管理器是否存储了给定域的密码?

c++ - 反转按位左移和或赋值

c++ - C/C++混合程序中的错误LNK2005和错误LNK2019

c++ - VirtualAllocEx 失败 GetError 返回 ERROR_INVALID_ADDRESS

java - Java 中与 USB 设备交互的跨平台库

c++ - 八进制常量错误(libusb)

c++ - SendMessage 到 64 位应用程序不起作用