gpt4 book ai didi

windows - MinGW 与 MSVC 下的 Windows 导出/导入符号; CMake WINDOWS_EXPORT_ALL_SYMBOLS 被忽略

转载 作者:行者123 更新时间:2023-12-02 02:40:30 25 4
gpt4 key购买 nike

要使用 Visual Studio 构建 C 库,请使用 CMake 命令

set(WINDOWS_EXPORT_ALL_SYMBOLS ON)

让我免于添加 __declspec(dllexport)__declspec(dllimport)在函数声明之前;只有全局变量需要显式导入/导出符号。

在 MinGW 下(阅读:MinGW 或其推荐的替代品 Mingw-w64)这不起作用。将应用程序(也用 MinGW 构建)链接到我的库失败,直到我在每个函数前面粘贴了导入/导出符号。而长答案 https://stackoverflow.com/a/32284832/1017348建议相反:在 MinGW 下不需要导入/导出符号。这个答案对吗?那么如何摆脱对导入/导出符号的需求?

最佳答案

我刚刚遇到了同样的问题。在浏览 CMake 源代码后,对我有用的修复程序还添加了:

set( CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1 )

CMake says :

This property is implemented only for MS-compatible tools on Windows.



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> 实现了此功能。命令。我以前想过添加一个自定义规则来运行该命令。虽然它以 __ 开头,它供内部使用,可能会从一个版本更改为下一个版本。

关于windows - MinGW 与 MSVC 下的 Windows 导出/导入符号; CMake WINDOWS_EXPORT_ALL_SYMBOLS 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59838565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com