Joa*_*m W 7 windows mingw cmake dllexport declspec
要使用 Visual Studio 构建 C 库,请使用 CMake 命令
set(WINDOWS_EXPORT_ALL_SYMBOLS ON)
Run Code Online (Sandbox Code Playgroud)
使我免于添加__declspec(dllexport)或__declspec(dllimport)在函数声明之前;只有全局变量需要显式导入/导出符号。
在 MinGW 下(阅读:MinGW 或其推荐的替代品 Mingw-w64)这不起作用。将应用程序(也用 MinGW 构建)链接到我的库失败,直到我在每个函数前面粘贴了导入/导出符号。而长答案/sf/answers/2259938271/表明相反:MinGW 下不需要导入/导出符号。这个答案对吗?那么如何摆脱对导入/导出符号的需求?
我刚刚遇到了同样的问题。在浏览 CMake 源代码后,对我有用的修复程序还添加了:
set( CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1 )
Run Code Online (Sandbox Code Playgroud)
此属性仅适用于 Windows 上的 MS 兼容工具。
CMake 通过CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS在<cmake install>/Modules/Platform他们知道支持的每个“平台”文件中进行设置来启用此功能。但是,CMake 不会将 MinGW 建模为“平台”。相反,您只需选择“Windows Makefile”、“Windows Ninja”等,然后手动设置 C/C++/Fortran 编译器以指向 MinGW gcc 编译器。理想情况下,CMake 应该识别操作系统是 Windows 并且编译器是 gcc 并为我们设置它,但现在我们可以通过自己设置来帮助它。
顺便说一句,CMake 使用隐藏cmake -E __create_def <output-def> <input-list-of-obj-files>命令实现了此功能。我以前想过添加一个自定义规则来运行该命令。虽然它以 开头__,但它是供内部使用的,并且可能会从一个版本更改为下一个版本。
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |