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

如何正确使用CMake的find_library?自建动态库链接失败求助

解决CMake找不到共享库的问题

问题核心分析

你当前的问题主要是两个:一是find_library的路径设置错误,二是缺少头文件路径配置;另外如果先编译app再编译库,也会导致找不到库。下面给出两种可行的解决方法:


方法一:修正路径配置(适合分开编译库和app)

1. 先编译生成libsort.so

进入lib目录,创建build子目录并执行编译:

cd lib
mkdir build && cd build
cmake .. && make

执行完成后,libsort.so会生成在lib/build/deploy目录下。

2. 修改app目录下的CMakeLists.txt

修正库的查找路径,同时添加头文件目录(否则编译main.cpp会找不到sort.h):

cmake_minimum_required(VERSION 3.22)

project(my_app)

# 从app目录向上回到主目录,定位到lib的deploy目录
find_library(LIB_FILE sort HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../lib/build/deploy REQUIRED)
add_executable(my_app main.cpp)

# 链接目标库
target_link_libraries(${PROJECT_NAME} ${LIB_FILE})
# 添加头文件搜索路径
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lib/include)

3. 编译app

进入app目录,创建build子目录执行编译:

cd app
mkdir build && cd build
cmake .. && make

方法二:用CMake子项目统一编译(更推荐,无路径烦恼)

这种方式让CMake自动管理依赖关系,无需手动处理路径问题。

1. 在主目录创建根CMakeLists.txt

cmake_minimum_required(VERSION 3.22)

project(my_project)

# 添加lib子项目,自动编译生成sort库
add_subdirectory(lib)
# 添加app子项目
add_subdirectory(app)

2. 修改app目录下的CMakeLists.txt

直接链接已导入的sort库,无需find_library:

cmake_minimum_required(VERSION 3.22)

project(my_app)

add_executable(my_app main.cpp)

# 直接链接sort库(lib子项目已将其导入CMake环境)
target_link_libraries(${PROJECT_NAME} PRIVATE sort)

注:由于lib的CMakeLists中用PUBLIC设置了头文件目录,链接时会自动传递给app,无需额外配置头文件路径。

3. 统一编译

在主目录创建build子目录执行编译:

mkdir build && cd build
cmake .. && make

CMake会自动先编译libsort.so,再编译my_app可执行文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:55:26