web-dev-qa-db-ja.com

OpenCV 2.3コンパイルの問題-未定義の参照-Ubuntu 11.10

システム情報:Ubuntu 11.10(64ビット)OpenCV 2.3(今日インストール済み)

OpenCV 2.3で非常に単純なコードをコンパイルしようとしていますが、奇妙なエラーが発生しています。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(){
  cv::Mat image=cv::imread("img.jpg");
  cv::namedWindow("My Image");
  cv::imshow("My Image",image);
  cv::waitKey(0);
  return 1;
}

しかし、私はこれらのエラーメッセージを取得しています...

-SG41:~/Desktop$ g++ `pkg-config opencv --cflags --libs` -o test_1 test_1.cpp 
/tmp/ccCvS1ys.o: In function `main':
test_1.cpp:(.text+0x44): undefined reference to `cv::imread(std::basic_string<char,    std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0x8e): undefined reference to `cv::namedWindow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0xbc): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test_1.cpp:(.text+0xf0): undefined reference to `cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
test_1.cpp:(.text+0x112): undefined reference to `cv::waitKey(int)'
/tmp/ccCvS1ys.o: In function `cv::Mat::~Mat()':
test_1.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccCvS1ys.o: In function `cv::Mat::release()':
test_1.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status
38
user1002414

私は、少なくともいくつかのライブラリの出力にあると推測しています

pkg-config opencv --libs

アーカイブライブラリです。アーカイブライブラリを必要とするソースの前にアーカイブライブラリを配置するのは正しくありません(test_1.cppこの場合):リンク行のソースとライブラリの順序 matters

試してみる

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

私は同じ問題を抱えていましたが、pkg-config opencv --cflagsが「-I/usr/include/opencv2」ではなく「-I/usr/include/opencv」を出力していることがわかりました... Ubuntu?

2
dividebyzero

私はcmakeを使用していますが、同様の問題がありました。

Cmake構成ファイルで奇妙なことが起こっています。

私にとっては、OPENCV_FOUNDをTRUEに、OpenCV_FOUNDをTRUEに設定するだけで問題は解決しました。

また、OpenCV_DIRを/ usr/local/share/OpenCVに設定する必要がありました。

opencvを構成するCMakeエラー も参照してください。

0
Tim Kuipers

@EmployedRussianの答えは私にも役立ちました。 Eclipseでこのコマンドを指定する方法を知りたい場合は、この投稿を使用してください-

https://www.Eclipse.org/forums/index.php?t=msg&goto=233377&

Gtk +を追加する代わりに、opencvを使用してください。 「その他のリンカーフラグ」に新しいフラグを追加する代わりに、「プロジェクト」->「右クリック」->「プロパティ」->「C/C++ビルド」->「設定」->「GCC C++リンカー」の$ {INPUT}の後に新しいフラグを追加します>エキスパート設定:コマンドラインパターン

0
IEEE754