2

Linux で g++ を使用して opencv のサンプル コードのサンプルをコンパイルしようとして問題が発生しましたが、実行後に次のエラー メッセージが表示されます。

g++ `pkg-config --cflags --libs opencv` hello.cpp -o hello

私はこの出力を得る:

/tmp/ccjvVxLI.o: In function `main':
hello.cpp:(.text+0x45): undefined reference to `cvLoadImage'
hello.cpp:(.text+0x6b): undefined reference to `cvNamedWindow'
hello.cpp:(.text+0x7c): undefined reference to `cvShowImage'
hello.cpp:(.text+0x86): undefined reference to `cvWaitKey'
hello.cpp:(.text+0x90): undefined reference to `cvDestroyWindow'
collect2: ld returned 1 exit status

オンラインで調べて、OpenCV のインストールを確認したところ、次の通常の出力が得られました。

pkg-config --cflags opencv

なので:

-I/usr/local/include/opencv -I/usr/local/include  

しかし、私が走ったとき:

pkg-config --libs opencv

次のような奇妙なリストを取得しました。

/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so     /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so 

それが役立つ場合、このサイトの助けを借りてubuntu LTS 12.04にOpencv2.4.1をインストールしました:http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04 -lts/

4

3 に答える 3

5

これを試して:

g++ `pkg-config --cflags opencv` -o hello hello.cpp `pkg-config --libs opencv`
于 2012-07-18T02:33:17.783 に答える
2

GCCのマニュアルによると

コマンドのどこにこのオプションを記述するかによって違いが生じます。リンカーは、指定された順序でライブラリとオブジェクト ファイルを検索して処理します。したがって、'foo.o -lz bar.o' は、ファイル foo.o の後、bar.o の前にライブラリー 'z' を検索します。bar.o が 'z' 内の関数を参照する場合、それらの関数はロードされない可能性があります。

そのためpkg-config --libs opencv、ファイル名の最後に を付ける必要があります。そうしないと、gcc はシンボルを解決できません。

g++ hello.cpp -o hello `pkg-config --cflags --libs opencv`
于 2015-04-30T10:48:37.680 に答える
0

このスレッドを参照してください:

OpenCV ライブラリでコードをコンパイルする

これらをコマンドライン引数として追加することも非常にうまく機能します:

-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect

于 2013-12-31T17:54:15.367 に答える