【发布时间】:2018-10-23 00:39:55
【问题描述】:
我正在尝试为我的应用程序创建一个插件系统,因此每个插件都需要与我的主应用程序链接。这在 Linux 和 macOS 上很好,因为我可以设置我的可执行目标 (set_target_properties(${PROJECT_NAME} PROPERTIES ENABLE_EXPORTS 1) 的 ENABLE_EXPORTS 属性,插件就会很好地链接。然而,在 Windows 上,clang++ 对我大喊它找不到 libws2editor.dll.a。
clang++.exe: error: no such file or directory: 'ws2editor/libws2editor.dll.a'
在查看 CMake 文档时,它显示“对于 DLL 平台,将为导出的符号创建一个导入库,然后用于链接。” - 这个导入库文件(大概是 .dll.a)似乎永远不会被创建。
那么我怎样才能让 CMake 在 Windows 上构建来创建这个文件,或者以其他方式与可执行文件链接?
【问题讨论】:
-
将插件与主应用程序链接是什么意思?据我所知,要为您的应用程序提供插件,您应该在您的应用程序(您的主要可执行文件)中声明一些接口并在您的插件中实现它。
-
您是否在主可执行文件上设置了 ENABLE_EXPORTS 属性?
-
@wxShayan 是的,我确实在主 exe 上设置了 ENABLE_EXPORTS。我的意思也正是我说“链接到 exe”时所说的,我的插件有
target_link_libraries(${PROJECT_NAME} ws2editor) -
经过一番挖掘后,我遇到了github.com/Kitware/CMake/blob/master/Tests/Plugin/… - 当我克隆 CMake 存储库并尝试自己编译该测试时,使用 clang + ninja 时它也会失败并出现同样的错误!当使用 MSVC/msbuild 构建时,它编译得很好(但是,我的项目在为 MSVC 生成文件时无法配置,理想情况下我想在 Win/Mac/Linux 上使用相同的构建配置)。
标签: c++ windows build cmake linker