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

Ubuntu20下无法修改CMakeLists.txt时为何-DIMPORTED_LOCATION无法链接自定义路径libdlt.so

问题原因说明

1. -DIMPORTED_LOCATION 参数本身使用逻辑错误

-DIMPORTED_LOCATION 不是CMake全局通用的库路径配置参数,它是**单个导入目标(IMPORTED Target)**的专属属性,你直接在命令行全局传入该参数,相当于定义了一个无任何引用的自定义变量,CMake不会自动把该路径绑定到dlt库的查找逻辑上,因此完全不生效。
正确的属性赋值格式需要指定目标名,例如如果dlt库的导入目标名为dlt::dlt,需要按构建类型传入类似-Ddlt::dlt_IMPORTED_LOCATION_RELEASE=/home/map/third_party/libdlt.so的参数,普通用户一般无法提前知道项目定义的导入目标名,因此这种方式不适用你的场景。

2. 未给链接器指定自定义库搜索路径

链接器默认只会扫描系统预设的库路径(如/usr/lib、/usr/local/lib等),你自定义的/home/map/third_party不在默认搜索列表中,就算你正确配置了导入目标属性,也需要主动告知CMake该搜索路径。


无需修改CMakeLists.txt的解决方案

直接在cmake命令中传入库搜索路径参数即可:

cmake .. -DCMAKE_LIBRARY_PATH=/home/map/third_party

该参数会让CMake优先在指定路径下查找依赖库,找到后自动将路径加到链接选项中,替换默认路径的libdlt.so。
如果上述方式仍不生效,可以直接强制传入链接器参数:

cmake .. -DCMAKE_EXE_LINKER_FLAGS="-L/home/map/third_party -Wl,-rpath=/home/map/third_party"

其中-L指定编译时库搜索路径,-rpath指定运行时库搜索路径,避免运行时也找不到库的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:00