首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库名称已损坏

库名称已损坏
EN

Stack Overflow用户
提问于 2013-04-28 22:58:23
回答 1查看 735关注 0票数 4

我正在尝试使用CMake链接Windows上的一个共享库。这个共享库是用Clang编译的,因此我必须使用GNU ld,以便正确地传播调试符号(因为微软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副本默认使用微软link.exe,并且我将CMAKE_CXX_CREATE_SHARED_LIBRARY设置为覆盖此行为。如果是这样的话,我很可能不得不重新编译Clang (并且希望我不会在新的副本中得到相同的行为)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-29 01:17:55

您可以尝试修改CMAKE_LINK_LIBRARY_SUFFIX变量:

代码语言:javascript
复制
unset(CMAKE_LINK_LIBRARY_SUFFIX)
target_link_libraries(${my_target} kernel32)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16264159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档