警告: libopencv_core.so.4.2 (/opt/ros/noetic/lib/libcv_bridge.so に必要) は lib と競合する可能性があります

最近、Raspberry Pi 4b 上の ROS システムで ORB-SLAM2 を実行したいと考えましたが、その過程で難しい問題に遭遇しました。結局、盲目の猫がネズミを殺したということで解決したようですが、変な問題が残っているのかはわかりません。ここで簡単な記録を作成します。

Raspberry Pi 4b: 公式 Ubuntu20 サーバーをインストールしてから、ubuntu-desktop デスクトップをインストールしました。
OpenCV3がインストールされています

ORB-SLAM2:正式版。

最後に、ROS Noetic の opencv バージョンと ubuntu の間で競合が発生しました (前者は opencv4、後者は opencv3)。質問は次のとおりです。

/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so,  by /mayopt/ros/noetic/lib/libcv_bridge.so, may conflict with  conflictlibopencv_core.so.3.4
/usr/ withbin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol '_ZNK2cv8FileNodecviEv'
/usr/bin/ld: /usr/lib/aarch64-linux libopencv_imgproc.so.3.4
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: undefined reference to symbol '_ZN2cv7putTextERKNS_17_InputOutputArrayERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6Point_IiEEidNS_7Scalar_IdEEiib'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
-gnu/libopencv_core.so.4.2.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/MonoAR.dir/build.make:268: ../MonoAR] Error 1
make[1]: *** [CMakeFiles/Makefile2:541: CMakeFiles/MonoAR.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/Stereo.dir/build.make:198: ../Stereo] Error 1
make[1]: *** [CMakeFiles/Makefile2:568: CMakeFiles/Stereo.dir/all] Error 2
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
[ 55%] Built target Mono
[ 66%] Built target RGBD
make: *** [Makefile:130: all] Error 2

ROS システムには libopencv_core.so.4.2 と libopencv_imgproc.so.4.2 が必要ですが、ORB-SLAM2 の Cmakelist は libopencv_core.so.3.4 と libopencv_imgproc.so.3.4 を使用します。
オンラインの紹介文を読んだ後、解決策は大まかに 3 つあります:
1. 代わりに opencv4 の ORB-SLAM2 を使用する github に https://github.com/mateomd-dev/orb-slam2 があります。
2 ROS cv_bridge で opencv3 を使用するか、cv_bridge を再インストールします。

3 libopencv_core.so.4.2、libopencv_imgproc.so.4.2 を導入します。

私は方法 3 を使用します。率直に言って、私が理論的な知識を持っていたわけではなく、多くの実験を行った結果、これを発見しました。具体的な方法は、rosのcmakelist.txtに以下を追加することです。

/usr/local/lib/libopencv_core.so.3.4
/usr/local/lib/libopencv_imgproc.so.3.4
/usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2
-lboost_system

結果は次のとおりです。

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
/usr/local/lib/libopencv_core.so.3.4
/usr/local/lib/libopencv_imgproc.so.3.4
/usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2
/usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.4.2
-lboost_system
)

それはそれです~

おすすめ

転載: blog.csdn.net/qq_41873057/article/details/129943471