1

数か月前に Linux で正常にコンパイルされた私のソフトウェアは、新しい ubuntu でコンパイルを停止しました。

Linking CXX executable myApp
/usr/bin/ld: ../libMyLib/libMyLib.a(MyFile.cpp.o): undefined reference to symbol '_ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputArrayENS_5Size_IiEEddi'
/usr/bin/ld: note: '_ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputArrayENS_5Size_IiEEddi' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libopencv_imgproc.so so try adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libopencv_imgproc.so: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[2]: *** [myApp/myApp] Error 1
make[1]: *** [myApp/CMakeFiles/myApp.dir/all] Error 2
make: *** [all] Error 2

https://fedoraproject.org/wiki/UnderstandingDSOLinkChangeに関連していると思います。

私のプロジェクト(すべてcmake)にはいくつかのライブラリとアプリケーションが含まれています。ライブラリとアプリケーションの両方がopencvおよび/またはboost(それぞれ異なるもの)に依存しています。私自身のライブラリは .a ファイルとしてビルドされ、ocv/boost は共有ライブラリとして取り込まれ、アプリケーションのリンクは上記のエラーで失敗します。

また、独自のライブラリを SHARED として構築しようとしましたが、さらに多くのエラーが発生しました。私のライブラリのCMakeListsは次のようになります

FIND_PACKAGE(Boost REQUIRED)
FIND_PACKAGE(OpenCV REQUIRED core)
...stuff...
include_directories( ${OpenCV_INCLUDE_DIRS} )
include_directories( ${Boost_INCLUDE_DIRS} )
add_library( ${SUBPROJECT_NAME} ${SOURCE} ${HEADERS} )

アプリケーション CMakeLists は次のようになります

FIND_PACKAGE( OpenCV REQUIRED core imgproc highgui)
include_directories( ${OpenCV_INCLUDE_DIRS} )
TARGET_LINK_LIBRARIES( ${SUBPROJECT_NAME} ${OpenCV_LIBS} MyLib )

それはすべて正しかったし、私はいつもそれがそれを行う方法だと思っていましたが、今ではこの DSO のものではもう動作させることができません.

関連する場合、CMake 2.8.7 と 2.8.10、および g++ 4.7.2 と 4.8 で試してみましたが、すべて同じエラーが発生します。

4

2 に答える 2

1

OpenCV_LIBS には -lopencv_imgproc が含まれていますか? そうでない場合は、手動で -lopencv_imgproc をリンク コマンド ラインに追加してみてください (make V=1 を実行します)。動作する場合は、TARGET_LINK に追加します。

于 2013-04-12T14:53:24.090 に答える