图书馆名称受损

时间:2013-04-28 14:58:23

标签: cmake

我正在尝试使用CMake在Windows上链接共享库。这个共享库是用Clang编译的,因此我必须使用GNU ld,以便调试符号得到正确传播(因为Microsoft link.exe对GNU样式的调试符号一无所知)。我的共享库依赖于kernel32.dllmsvcrt.dll的导入库。我有GNU风格的导入库作为w32api安装的一部分。

但是,当我在target_link_libraries()调用中指定导入库名称时,名称会被破坏,以便target_link_libraries(${my_target} kernel32)在命令行上变为-lkernel32.lib。但是,kernel32导入库的名称是libkernel32.a,而不是libkernel32.lib.a,因此链接失败。我怀疑这是因为我的Clang副本默认使用Microsoft link.exe,我设置CMAKE_CXX_CREATE_SHARED_LIBRARY来覆盖此行为。如果是这种情况,我很可能不得不重新编译Clang(并希望我在新副本中没有得到相同的行为)。

编辑:Clang没有错。我从头开始重建Clang,却发现.lib后缀仍然自动添加。我知道现在是CMake的错。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您可以尝试修改CMAKE_LINK_LIBRARY_SUFFIX变量:

unset(CMAKE_LINK_LIBRARY_SUFFIX)
target_link_libraries(${my_target} kernel32)