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

使用CMake构建程序时链接器无法找到mearlymath库求助

解决CMake链接静态库时找不到-lmearlymath的问题

错误原因分析

出现ld: library not found for -lmearlymath错误,核心是CMake在链接阶段无法定位到/usr/local/lib下的libmearlymath.a静态库,涉及两个关键问题:

  1. 库的CMakeLists.txt中,install指令仅配置了动态库(LIBRARY目标)的安装,缺失静态库对应的ARCHIVE目标;
  2. 测试项目的CMakeLists.txt未明确告知CMake库的搜索路径,导致链接器无法找到库文件。

解决方案步骤

步骤1:修正库的CMakeLists.txt,完善静态库安装配置

打开SomeLibDemo/AddLibDemo/CMakeLists.txt,修改install指令,同时支持静态库和动态库的安装:

cmake_minimum_required(VERSION 3.27.2)
project(mearlymath)
add_library(${PROJECT_NAME} adder.cpp)
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER adder.h)
# 同时配置静态库(ARCHIVE)和动态库(LIBRARY)的安装路径
install(TARGETS ${PROJECT_NAME} 
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib
    PUBLIC_HEADER DESTINATION include)

回到库的build目录,重新编译并安装:

cmake ..
make
make install

步骤2:修改测试项目的CMakeLists.txt,让CMake找到库

以下两种方法任选其一:

方法一:直接指定路径(快速测试用)

修改TestSome/CMakeLists.txt,明确添加头文件和库的搜索路径:

cmake_minimum_required(VERSION 3.27.2)
project(testsome)
add_executable(testsome main.cpp)
# 指定头文件目录
target_include_directories(testsome PRIVATE /usr/local/include)
# 指定库文件搜索目录
link_directories(/usr/local/lib)
# 链接静态库
target_link_libraries(testsome PRIVATE mearlymath)

方法二:使用find_package(规范的CMake方式,推荐)

这种方式适合长期维护的库,需要先给库添加导出配置:

  1. 在库的目录SomeLibDemo/AddLibDemo下创建Config.cmake.in文件,内容如下:
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/mearlymathTargets.cmake")
check_required_components(mearlymath)
  1. 修改库的CMakeLists.txt,添加配置导出代码(放在install指令之后):
export(PACKAGE ${PROJECT_NAME})
include(CMakePackageConfigHelpers)
# 生成版本配置文件
write_basic_package_version_file(
    "${PROJECT_NAME}ConfigVersion.cmake"
    VERSION 1.0.0
    COMPATIBILITY AnyNewerVersion
)
# 生成配置文件
configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
    INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
)
# 安装配置文件
install(
    FILES
        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
        "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
    DESTINATION lib/cmake/${PROJECT_NAME}
)
  1. 重新编译安装库:
cd SomeLibDemo/AddLibDemo/build
make clean
cmake ..
make
make install
  1. 修改测试项目的CMakeLists.txt,使用find_package加载库:
cmake_minimum_required(VERSION 3.27.2)
project(testsome)
add_executable(testsome main.cpp)
# 查找并加载mearlymath库
find_package(mearlymath REQUIRED)
# 链接库
target_link_libraries(testsome PRIVATE mearlymath)

验证解决效果

回到测试项目的build目录,重新执行:

cmake ..
make

此时应该能成功编译链接,生成testsome可执行文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:39