Cannot generate a safe runtime search path for target mono_euroc because files in some directories

作者在ROS下配置ORB-SLAM3运行环境时,编译过程遇到错误警告。原因是/usr/lib/x86-x64-linux-gnu与/usr/local/lib中的库冲突,不知链接是否正确。解决方法是将冲突的*.so文件在/usr/local/lib下建立符号链接,最终得到正常的CMake结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake Warning at CMakeLists.txt:182 (add_executable):
  Cannot generate a safe runtime search path for target mono_inertial_tum_vi
  because files in some directories may conflict with libraries in implicit
  directories:

    runtime library [libtiff.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /usr/local/lib
runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /usr/local/lib

  Some of these libraries may not be found correctly.

1.错误描述

笔者最近在ros地下配置orbslam3的运行环境,编译过程遇到上述的错误警告。

2.解决方法

上面的意思是:urs/lib/x86-x64-linux-gnu跟usr/local/lib中的库冲突了,不知道链接是否正确,将urs/lib/x86-x64-linux-gnu中的冲突*.so建立符号链接到usr/local/lib下面,问题解决,然后就可以看到开心的cmake结果:

Build type: Release
-- Using flag -std=c++11.
OPENCV VERSION:
4.2.0
-- BUILD TYPE:Release
-- Compiling on Unix
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jiaken2660/Code/ORB_SLAM3/build

 

CMake Warning at cmake/OpenCVUtils.cmake:1508 (add_library): Cannot generate a safe runtime search path for target opencv_imgcodecs because files in some directories may conflict with libraries in implicit directories: runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libwebp.so.7] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libpng16.so.16] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libtiff.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib Some of these libraries may not be found correctly. Call Stack (most recent call first): cmake/OpenCVModule.cmake:930 (ocv_add_library) cmake/OpenCVModule.cmake:851 (_ocv_create_module) modules/imgcodecs/CMakeLists.txt:140 (ocv_create_module) CMake Warning at cmake/OpenCVUtils.cmake:1508 (add_library): Cannot generate a safe runtime search path for target opencv_videoio because files in some directories may conflict with libraries in implicit directories: runtime library [libgstbase-1.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libgstreamer-1.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libgobject-2.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libglib-2.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libgstapp-1.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime library [libgstriff-1.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/charon/anaconda3/lib runtime libra
最新发布
04-03
<think>好的,我现在要解决用户在构建OpenCV时遇到的CMake运行时库路径冲突警告,具体是关于opencv_imgcodecs和opencv_videoio目标,由于Anaconda库在Ubuntu x86_64上的干扰。首先,我需要了解这个问题的根源。 根据用户提供的引用,特别是引用[2]提到在Ubuntu安装OpenCV3.4.12时与Anaconda冲突,导致编译问题,而下载opencv_contrib并正确放置后解决了问题。这可能意味着Anaconda的环境变量或库路径被CMake优先检测到,从而干扰了OpenCV的正常编译。 接下来,我需要回忆CMake在构建过程中如何搜索依赖库。CMake会按照一定的顺序查找系统路径,而Anaconda可能将自身的库路径添加到环境变量中,如LD_LIBRARY_PATHPATH,导致CMake错误地链接到Anaconda的库而不是系统库。例如,如果Anaconda的路径在系统路径之前,CMake可能会找到Anaconda中的ffmpeg或其他相关库,导致冲突。 用户提到的警告可能是由于不同运行时库的路径不一致,导致生成的目标文件(如opencv_imgcodecs和opencv_videoio)引用了来自不同位置的库,从而引发潜在的运行时错误。例如,引用[3]中的问题涉及到ffmpeg相关的dll下载失败,这可能与网络有关,但路径冲突也可能导致类似问题。 解决方案方面,我需要考虑如何让CMake忽略Anaconda的库路径,或者调整环境变量,使系统库优先。可能的步骤包括: 1. **临时屏蔽Anaconda环境变量**:在编译时,暂时将Anaconda的路径从环境变量中移除,特别是PATH和LD_LIBRARY_PATH。例如,在终端中执行`unset LD_LIBRARY_PATH`,或者在运行CMake之前导出干净的PATH。 2. **明确指定系统库路径**:在CMake配置时,通过参数指定ffmpeg或其他依赖库的位置,避免CMake自动搜索到Anaconda的路径。例如,使用`-D WITH_FFMPEG=ON`并指定FFMPEG的路径。 3. **修改CMakeLists.txt文件**:如果某些模块明确依赖系统库,可以在CMake配置中手动设置这些库的路径,覆盖默认的搜索路径。 4. **使用虚拟环境或容器隔离**:例如,使用Docker容器来构建OpenCV,确保环境纯净,避免Anaconda的影响。 此外,参考引用[4]中提到的环境变量配置问题,可能需要在编译完成后正确设置运行时库路径,避免执行时出现类似找不到dll的问题。但当前问题主要是在编译阶段的CMake警告,所以重点应放在编译时的环境配置。 需要验证这些步骤的有效性。例如,用户可能已经安装了系统版本的ffmpeg,但Anaconda中的版本与之不兼容。通过屏蔽Anaconda路径,CMake应该正确找到系统库,消除路径冲突的警告。 另外,用户使用的是Ubuntu x86_64系统,可能需要安装必要的系统依赖,如libtiff-dev、libjpeg-dev等,确保OpenCV能够正确链接到这些系统库,而不是Anaconda中的版本。引用[1]提到在编译时加上-D BUILD_TIFF=ON,这可能是因为系统缺少某些库,导致需要内置构建TIFF支持,这也可能与路径冲突有关。 总结可能的解决步骤: - 检查并修改环境变量,确保系统库路径优先。 - 明确指定CMake参数,指向系统库。 - 确保所有依赖库已正确安装。 - 清理构建目录并重新配置CMake,避免缓存干扰。 最后,需要测试这些解决方案是否有效,例如重新运行CMake并观察是否仍然出现路径冲突的警告,以及编译后的OpenCV是否正常工作。</think>### 解决CMake运行时库路径冲突警告的方法 在Ubuntu x86_64系统上构建OpenCV时,若因Anaconda库干扰导致`opencv_imgcodecs`和`opencv_videoio`目标出现运行时库路径冲突警告,可通过以下步骤解决: --- #### **1. 屏蔽Anaconda环境变量** CMake可能优先搜索Anaconda的库路径,导致与系统库冲突。**临时禁用Anaconda环境变量**: ```bash # 终端中执行: unset LD_LIBRARY_PATH export PATH=$(echo $PATH | tr ':' '\n' | grep -v "anaconda3" | paste -sd: -) ``` 此操作仅在当前终端会话中生效,避免Anaconda路径干扰编译。 --- #### **2. 指定系统库路径** 在CMake配置时**显式指定依赖库路径**,避免自动搜索到Anaconda的库: ```bash cmake -D WITH_FFMPEG=ON \ -D FFMPEG_LIBRARIES=/usr/lib/x86_64-linux-gnu \ -D BUILD_TIFF=ON \ -D WITH_VTK=OFF \ -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules \ .. ``` - `FFMPEG_LIBRARIES`:指向系统FFmpeg库路径(默认在`/usr/lib/x86_64-linux-gnu`)。 - `BUILD_TIFF=ON`:强制OpenCV内置TIFF支持,避免依赖系统库[^1]。 --- #### **3. 安装系统依赖库** 确保系统已安装必要的开发包: ```bash sudo apt-get install libtiff-dev libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev ``` 这能减少CMake因缺失依赖而错误链接Anaconda库的可能性。 --- #### **4. 清理构建目录并重新配置** 删除旧的CMake缓存,避免残留配置干扰: ```bash rm -rf build/ mkdir build && cd build # 重新执行CMake配置 ``` --- #### **5. 使用虚拟环境隔离(可选)** 通过`conda`创建纯净环境,限定库搜索范围: ```bash conda create -n opencv_build python=3.8 conda activate opencv_build # 在虚拟环境中安装必要依赖(如numpy),然后重新配置CMake ``` --- #### **验证解决效果** 重新运行CMake后,检查输出中是否仍存在路径冲突警告。若成功解决,应看到类似以下信息: ``` -- Found FFMPEG: /usr/lib/x86_64-linux-gnu/libavcodec.so -- VideoIO: Using system FFmpeg backend ``` --- ### 相关问题 1. **如何避免Anaconda与系统库的其他冲突?** 建议使用虚拟环境或调整`LD_LIBRARY_PATH`优先级[^2]。 2. **CMake找不到FFmpeg库时如何手动指定路径?** 通过`-D FFMPEG_INCLUDE_DIR=/usr/include/x86_64-linux-gnu`和`-D FFMPEG_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu`参数指定。 3. **OpenCV编译成功后运行时提示缺少库怎么办?** 需配置`LD_LIBRARY_PATH`指向OpenCV的安装目录(如`/usr/local/lib`)并重启终端[^4]。 --- 通过以上步骤,可有效解决Anaconda库干扰导致的CMake运行时路径冲突问题,确保OpenCV正确链接系统库。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值