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
相关产品推荐
相关产品推荐

