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

Ubuntu20下CMake链接本地dlt-daemon库找不到-ldlt问题问询

问题根因分析

核心问题分为两类:构建命令存在多处错误、Log库的CMake配置没有将DLT的依赖属性传递给下游项目。

1. 现有CMake命令的错误

  • 路径不匹配:你实际的dlt安装路径是/home/map/third_party,但命令中所有路径都写成了/home/manoj/third_party,路径完全不匹配
  • 错误设置无效变量:IMPORTED_LOCATION、INTERFACE_INCLUDE_DIRECTORIES、INCLUDE_DIRECTORIES都是CMake的目标属性,不是全局可配置的变量,设置后不会生效
  • 未配置pkgconfig搜索路径:pkg-config默认不会扫描你本地的third_party目录,找不到你自己编译的dlt对应的pc文件,就会尝试找系统版本的dlt,找不到就会导致下游链接失败

另外你安装系统dlt包后出现未定义引用,是因为Ubuntu20源里的dlt版本远低于2.18.8,没有dlt_user_log_write_sized_utf8_string这个高版本新增的接口,所以必须全链路都使用你自己编译的dlt版本。

2. Log库CMake配置的缺陷

你用pkg_search_module找到DLT之后,只链接了${DLT_LIBRARIES}(只有库名,没有路径),但没有将DLT的头文件路径、库搜索路径作为PUBLIC属性传递给下游,所以依赖Log库的应用/其他库,不知道要去/home/map/third_party/lib下找libdlt.so,就会报cannot find -ldlt的错误。


解决方案

步骤1:修正构建命令

替换为以下修正后的命令,删除无效变量,补全正确的路径配置:

cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DARA_ENABLE_TESTS=OFF \
-DPKG_CONFIG_PATH=/home/map/third_party/lib/pkgconfig \
-DCMAKE_LIBRARY_PATH=/home/map/third_party/lib \
-DCMAKE_PREFIX_PATH=/home/map/third_party \
-DCMAKE_INSTALL_PREFIX=/home/map/third_party \
-DCMAKE_BUILD_TYPE=Release ..

步骤2:修正Log库的CMake配置(二选一即可,推荐方案2)

方案1:传递依赖路径给下游

在Log库src目录的CMakeLists.txt中,补充头文件路径和库搜索路径的PUBLIC配置:

target_include_directories(${PROJECT_NAME}
    PUBLIC
        ${DLT_INCLUDE_DIRS}
)
target_link_directories(${PROJECT_NAME}
    PUBLIC
        ${DLT_LIBRARY_DIRS}
)
target_link_libraries(${PROJECT_NAME}
    PUBLIC
        ${DLT_LIBRARIES}
        ara::core-types
        apd::Threads
)

方案2:直接链接完整库路径(更稳妥,不会出现路径传递问题)

直接使用pkg_search_module返回的DLT_LINK_LIBRARIES(已经是完整的库文件路径)代替DLT_LIBRARIES,下游不需要额外搜索库路径:

target_link_libraries(${PROJECT_NAME}
    PUBLIC
        ${DLT_LINK_LIBRARIES}
        ara::core-types
        apd::Threads
)

修改完成后先重新编译Log库,再编译下游的应用和库即可正常链接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:27:03