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

如何在CMake中创建依赖另一个.so文件的共享对象?

如何在CMake中链接外部共享库(libconnlib.so)

嘿,我来帮你把你的DAL共享库链接到libconnlib.so!其实只需要在你的CMakeLists.txt里加几步配置就行,下面是具体的操作方法和修改后的完整代码:

核心步骤说明

要链接外部共享库,我们需要做两件事:

  • 让CMake找到libconnlib.so的位置
  • 把它关联到你的DAL目标上

方法1:使用find_library(推荐,更规范)

如果libconnlib.so在系统标准库路径(比如/usr/lib)里,或者你知道它的具体路径,可以用find_library来定位它,然后通过target_link_libraries链接:

# 查找libconnlib.so,NAMES指定库名(去掉lib前缀和.so后缀)
# 如果库不在标准路径,用PATHS参数指定路径,比如PATHS /home/your/libs
find_library(CONN_LIB NAMES connlib)

# 确保找到库,否则报错
if(NOT CONN_LIB)
    message(FATAL_ERROR "找不到libconnlib.so,请检查路径是否正确!")
endif()

# 将找到的库链接到DAL目标
target_link_libraries(DAL PRIVATE ${CONN_LIB})

方法2:直接指定库路径(适合快速测试)

如果你明确知道libconnlib.so的所在目录,可以用target_link_directories先指定路径,再链接库:

# 指定libconnlib.so所在的目录
target_link_directories(DAL PRIVATE /path/to/your/libconnlib/dir)

# 链接库(这里写库名connlib,CMake会自动识别libconnlib.so)
target_link_libraries(DAL PRIVATE connlib)

修改后的完整CMakeLists.txt

下面是把方法1整合到你原文件后的完整代码,我标注了新增的部分:

cmake_minimum_required(VERSION 3.9)
project(DAL VERSION 1.0.1 DESCRIPTION "DAL - Data Access Layer this class connect with the sql data base throw the Connection class")
set(CMAKE_CXX_STANDARD 17)
include(GNUInstallDirs)

# ---------------------- 新增部分开始 ----------------------
# 查找libconnlib.so,若不在标准路径请添加PATHS参数
find_library(CONN_LIB NAMES connlib)
if(NOT CONN_LIB)
    message(FATAL_ERROR "找不到libconnlib.so,请检查库路径是否正确!")
endif()
# ---------------------- 新增部分结束 ----------------------

add_library(DAL SHARED src/AppSettingDAL.cpp src/AppSettingEntity.cpp src/SettingsModificationDAL.cpp src/SymbolDAL.cpp src/SymbolInfoEntity.cpp )
set_target_properties(DAL PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1 PUBLIC_HEADER include/AppSettingsDAL.hpp include/SettingsModificationDAL.hpp include/AppSettingEntity.hpp include/SymbolDAL.hpp include/SymbolInfoEntity.hpp )
configure_file(DAL.pc.in DAL.pc @ONLY)
target_include_directories(DAL PRIVATE .)

# ---------------------- 新增部分开始 ----------------------
# 将libconnlib.so链接到DAL
target_link_libraries(DAL PRIVATE ${CONN_LIB})
# ---------------------- 新增部分结束 ----------------------

install(TARGETS DAL LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/DAL.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)

补充说明

  • 使用PRIVATE是因为libconnlib.so是DAL内部依赖的库,不需要暴露给其他依赖DAL的目标;如果其他目标也需要用到这个库,可以改成PUBLIC。
  • 如果你的libconnlib有对应的头文件,别忘了用target_include_directories把头文件目录加进去,比如:target_include_directories(DAL PRIVATE /path/to/connlib/include)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:27:35