質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

484閲覧

Ubuntu OpenCV リンクエラー

Betty1009

総合スコア13

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/16 12:45

Ubuntu16.04.5 LTSを使用しています。以下のサイトを参考にしながらOpenCV3.4.1を導入したのですが、エラーが発生してしまいます。
GPUはNVIDIA GeForce GTX 1060を使用しています。

CUDAインストール : https://qiita.com/JeJeNeNo/items/a56be3be69dc88e6dfa4
OpenCV3.4.0 : https://qiita.com/JeJeNeNo/items/a56be3be69dc88e6dfa4

発生している問題・エラーメッセージ

opencv-3.4.1/samples/gpu/hog.cppをコンパイルした時のエラーメッセージです。

# gcc -o webcam webcam.cpp # 同じようなエラーメッセージのため、一部抜粋します # /tmp/cc5D2AM4.o: 関数 `main' 内: webcam.cpp:(.text+0x38): `cv::VideoCapture::VideoCapture(int)' に対する定義されていない参照です webcam.cpp:(.text+0x47): `cv::VideoCapture::isOpened() const' に対する定義されていない参照です webcam.cpp:(.text+0x69): `cv::VideoCapture::operator>>(cv::Mat&)' に対する定義されていない参照です webcam.cpp:(.text+0xbf): `cv::imshow(cv::String const&, cv::_InputArray const&)' に対する定義されていない参照です webcam.cpp:(.text+0xe7): `cv::waitKey(int)' に対する定義されていない参照です webcam.cpp:(.text+0x166): `cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)' に対する定義されていない参照です webcam.cpp:(.text+0x1b4): `cv::destroyAllWindows()' に対する定義されていない参照です webcam.cpp:(.text+0x1c8): `cv::VideoCapture::~VideoCapture()' に対する定義されていない参照です webcam.cpp:(.text+0x264): `cv::VideoCapture::~VideoCapture()' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `__static_initialization_and_destruction_0(int, int)' 内: webcam.cpp:(.text+0x2ad): `std::ios_base::Init::Init()' に対する定義されていない参照です webcam.cpp:(.text+0x2bc): `std::ios_base::Init::~Init()' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cv::String::String(char const*)' 内: webcam.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x54): `cv::String::allocate(unsigned long)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cv::String::~String()' 内: webcam.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): `cv::String::deallocate()' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cv::String::operator=(cv::String const&)' 内: webcam.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): `cv::String::deallocate()' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cv::Mat::~Mat()' 内: webcam.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): `cv::fastFree(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cv::Mat::release()' 内: webcam.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4b): `cv::Mat::deallocate()' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::operator<<(std::ostream&, cvflann::anyimpl::empty_any const&)' 内: webcam.cpp:(.text._ZN7cvflann7anyimpllsERSoRKNS0_9empty_anyE[_ZN7cvflann7anyimpllsERSoRKNS0_9empty_anyE]+0x1d): `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::base_any_policy::~base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl15base_any_policyD2Ev[_ZN7cvflann7anyimpl15base_any_policyD5Ev]+0x29): `operator delete(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::base_any_policy::~base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl15base_any_policyD0Ev[_ZN7cvflann7anyimpl15base_any_policyD5Ev]+0x20): `operator delete(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::big_any_policy<cvflann::flann_centers_init_t>::print(std::ostream&, void* const*)' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyINS_20flann_centers_init_tEE5printERSoPKPv[_ZN7cvflann7anyimpl14big_any_policyINS_20flann_centers_init_tEE5printERSoPKPv]+0x29): `std::ostream::operator<<(int)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::big_any_policy<cvflann::flann_algorithm_t>::print(std::ostream&, void* const*)' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyINS_17flann_algorithm_tEE5printERSoPKPv[_ZN7cvflann7anyimpl14big_any_policyINS_17flann_algorithm_tEE5printERSoPKPv]+0x29): `std::ostream::operator<<(int)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::big_any_policy<cv::String>::print(std::ostream&, void* const*)' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE5printERSoPKPv[_ZN7cvflann7anyimpl14big_any_policyIN2cv6StringEE5printERSoPKPv]+0x31): `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::typed_base_any_policy<cvflann::anyimpl::empty_any>::~typed_base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl21typed_base_any_policyINS0_9empty_anyEED2Ev[_ZN7cvflann7anyimpl21typed_base_any_policyINS0_9empty_anyEED5Ev]+0x35): `operator delete(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::typed_base_any_policy<cvflann::anyimpl::empty_any>::~typed_base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl21typed_base_any_policyINS0_9empty_anyEED0Ev[_ZN7cvflann7anyimpl21typed_base_any_policyINS0_9empty_anyEED5Ev]+0x20): `operator delete(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::typed_base_any_policy<char const*>::~typed_base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl21typed_base_any_policyIPKcED2Ev[_ZN7cvflann7anyimpl21typed_base_any_policyIPKcED5Ev]+0x35): `operator delete(void*)' に対する定義されていない参照です /tmp/cc5D2AM4.o: 関数 `cvflann::anyimpl::typed_base_any_policy<char const*>::~typed_base_any_policy()' 内: webcam.cpp:(.text._ZN7cvflann7anyimpl21typed_base_any_policyIPKcED0Ev[_ZN7cvflann7anyimpl21typed_base_any_policyIPKcED5Ev]+0x20): `operator delete(void*)' に対する定義されていない参照です

該当のソースコード

ソースコードは以下のようになります。

C++

1/* opencv-3.4.1/samples/webcam.cpp */ 2 3#include "opencv2/opencv.hpp" 4 5int main(int argh, char* argv[]) 6{ 7 cv::VideoCapture cap(0);//デバイスのオープン 8 //cap.open(0);//こっちでも良い. 9 10 if(!cap.isOpened())//カメラデバイスが正常にオープンしたか確認. 11 { 12 //読み込みに失敗したときの処理 13 return -1; 14 } 15 16 while(1)//無限ループ 17 { 18 cv::Mat frame; 19 cap >> frame; // get a new frame from camera 20 21 // 22 //取得したフレーム画像に対して,クレースケール変換や2値化などの処理を書き込む. 23 // 24 25 cv::imshow("window", frame);//画像を表示. 26 27 int key = cv::waitKey(1); 28 if(key == 113)//qボタンが押されたとき 29 { 30 break;//whileループから抜ける. 31 } 32 else if(key == 115)//sが押されたとき 33 { 34 //フレーム画像を保存する. 35 cv::imwrite("img.png", frame); 36 } 37 } 38 cv::destroyAllWindows(); 39 return 0; 40} 41

GPUを使った処理をしたいと思っているのですが、思うようにいっていません。また、リンクエラーだということはわかるのですが、具体的になにをすれば良いのかわかりません。
初心者ですので、具体的な解決策や参考になるサイトを教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2018/12/16 12:57

- 「OpenCV3.4.0」のURLが間違っているので修正してください。 - GPUを使用しない設定でのインストールは試されましたでしょうか? - このUbuntuはどのように入れたのでしょうか? もし、VirtualBoxなどの仮想環境の場合であれば、GPUを使用するのは難しくなります。
Betty1009

2018/12/17 05:32

不備があり申し訳ありません。 - OpenCV3.4.1 : https://qiita.com/shinohe/items/d41f77edac27be9cef57 - GPUを使用しない設定でのインストールは試していないので、これから試してみようと思います。 - Ubuntu は、仮想環境は使用せず、SSDにインストールしています。
guest

回答1

0

ベストアンサー

gcc -o webcam webcam.cpp

OpenCVに対するリンクの指示を行っていません。

-I、-l、-Lなどのオプションでインストールしたディレクトリを指定する必要があります。

投稿2018/12/16 13:19

編集2018/12/16 13:21
kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Betty1009

2018/12/17 08:31

gcc にリンカオプションを追加したらうまくできました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問