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

CMake find_library可找到静态库无法找到共享库问题排查咨询

问题产生原因

  • find_library是CMake设计用于查找链接阶段所需库文件的专用命令。Windows平台下动态库(.dll)本身不参与链接流程,参与链接的是动态库对应的导入库(.lib),因此find_library默认逻辑不会将.dll识别为合法的库文件目标。
  • 即使你手动拼接了b${CMAKE_SHARED_LIBRARY_SUFFIX}即b.dll作为搜索名称,find_library默认仍会自动为目标名追加CMAKE_FIND_LIBRARY_SUFFIXES中定义的后缀(Windows下默认值为.lib),实际搜索的文件名为b.dll.lib,自然无法匹配到目录下的b.dll。

解决方案

根据你的使用场景选择对应方案:

场景1:查找动态库的导入库用于链接

直接按照静态库的查找逻辑编写即可,不需要添加.dll后缀,CMake会自动匹配到对应的导入库:

find_library(b b PATHS "c:/work/libs/debug")

场景2:查找.dll文件用于部署到运行目录

.dll属于运行时文件,应该使用通用文件查找命令find_file:

find_file(b_dll NAMES b${CMAKE_SHARED_LIBRARY_SUFFIX} PATHS "c:/work/libs/debug")

如果需要沿用find_library的多目录查找逻辑,可以临时修改搜索后缀列表:

# 备份原有搜索后缀
set(ORIGIN_FIND_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
# 加入动态库后缀到搜索列表
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
find_library(b b PATHS "c:/work/libs/debug")
# 恢复原有配置避免影响后续逻辑
set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIGIN_FIND_SUFFIXES})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:04