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

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

ただいまの
回答率

90.47%

  • C++

    4522questions

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

  • Ubuntu

    1858questions

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

  • OpenCV

    1557questions

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

Ubuntu OpenCV リンクエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 423

Betty1009

score 1

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*)' に対する定義されていない参照です

該当のソースコード

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

/*  opencv-3.4.1/samples/webcam.cpp  */

#include "opencv2/opencv.hpp"

int main(int argh, char* argv[])
{
    cv::VideoCapture cap(0);//デバイスのオープン
    //cap.open(0);//こっちでも良い.

    if(!cap.isOpened())//カメラデバイスが正常にオープンしたか確認.
    {
        //読み込みに失敗したときの処理
        return -1;
    }

    while(1)//無限ループ
    {
        cv::Mat frame;
        cap >> frame; // get a new frame from camera

        //
        //取得したフレーム画像に対して,クレースケール変換や2値化などの処理を書き込む.
        //

        cv::imshow("window", frame);//画像を表示.

        int key = cv::waitKey(1);
        if(key == 113)//qボタンが押されたとき
        {
            break;//whileループから抜ける.
        }
        else if(key == 115)//sが押されたとき
        {
            //フレーム画像を保存する.
            cv::imwrite("img.png", frame);
        }
    }
    cv::destroyAllWindows();
    return 0;
}

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fiveHundred

    2018/12/16 21:57

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

    キャンセル

  • Betty1009

    2018/12/17 14:32

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

    キャンセル

回答 1

checkベストアンサー

0

gcc -o webcam webcam.cpp

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/17 17:31

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

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C++

    4522questions

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

  • Ubuntu

    1858questions

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

  • OpenCV

    1557questions

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