我正在尝试为我的应用程序创建一个插件系统,因此每个插件都需要与我的主应用程序链接。这在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)似乎从未创建过。
那么如何在Windows上创建CMake构建此文件,或以其他方式链接可执行文件?
答案 0 :(得分:0)
看起来我可以使用ar
为我生成.a文件,无论生成器如何 - 插件似乎链接并在执行此操作时加载正常。真棒! :)
if(WIN32)
#Invoke ar to generate a .dll.a from the .obj files, required to link plugins
add_custom_command(TARGET ${PROJECT_NAME} PRE_LINK
COMMAND sh -c "${CMAKE_AR} cr lib${PROJECT_NAME}.dll.a $$(find . -name '*.obj' -printf '%p ')"
COMMENT "Generating lib${PROJECT_NAME}.dll.a for external linking"
)
#Also add the install command for libws2editor.dll.a
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.dll.a DESTINATION bin)
endif(WIN32)