You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake调用target_link_libraries时同目录下静态与共享库优先链接哪一个

CMake同目录下静态/共享库的链接优先级

结论

默认配置下,CMake会优先选择链接共享库(动态库)。

具体原因

  • CMake的库查找逻辑由内置变量CMAKE_FIND_LIBRARY_SUFFIXES控制查找的文件后缀优先级,该变量的默认排序是共享库后缀在前,静态库后缀在后:
    • Linux平台默认顺序:.so > .a
    • macOS平台默认顺序:.dylib > .a
    • Windows平台默认顺序:.dll对应的导入库.lib > 静态库.lib(Windows下动态库的导入库和静态库后缀同名,CMake会优先识别带有动态库导入标识的文件)
  • 当你不带后缀传入库名调用target_link_libraries时,CMake会按照CMAKE_FIND_LIBRARY_SUFFIXES的顺序遍历搜索目录,只要先匹配到对应后缀的库文件就会停止查找,所以同目录下的共享库会被优先选中。

调整优先级的方法

如果需要强制优先链接静态库,可以手动修改CMAKE_FIND_LIBRARY_SUFFIXES的顺序,将静态库后缀放到最前面,示例配置如下:

set(CMAKE_FIND_LIBRARY_SUFFIXES .a .so .dylib)

也可以直接在target_link_libraries中传入带完整后缀的库名,显式指定链接类型。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 21:24:04