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

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

新規登録して質問してみよう
ただいま回答率
85.54%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

OpenCV

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

Ubuntu

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

C++

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

Q&A

解決済

1回答

2092閲覧

opencvアプリをビルドしようとするとエラーが出ます。

yutty

総合スコア12

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

OpenCV

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

Ubuntu

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

C++

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

1グッド

0クリップ

投稿2022/07/12 07:42

編集2022/07/12 08:30

環境:visual studio code、wsl2のubuntu、c++

opencvとc++の初学者です。
・解決したいこと
opencv4を用いたtest01.cppをtasks.jsonでビルドして、launch.jsonでデバックし、fruits.jpgのパスをコマンド引数として与えて画像を出力したいです。

・発生しているエラー
以下のようなエラーが発生しています。

/usr/bin/g++ -fdiagnostics-color=always -I /usr/local/include/opencv4 -g /home/<username>/pg_codes/opencv_app/q/test01.cpp -o /home/<username>/pg_codes/opencv_app/q/test01 /usr/bin/ld: /tmp/ccOfMN9w.o: in function `main': /home/<username>/pg_codes/opencv_app/q/test01.cpp:3: undefined reference to `cv::Mat::Mat()' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:5: undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:5: undefined reference to `cv::Mat::operator=(cv::Mat&&)' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:5: undefined reference to `cv::Mat::~Mat()' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:7: undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:8: undefined reference to `cv::waitKey(int)' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:3: undefined reference to `cv::Mat::~Mat()' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:5: undefined reference to `cv::Mat::~Mat()' /usr/bin/ld: /home/<username>/pg_codes/opencv_app/q/test01.cpp:3: undefined reference to `cv::Mat::~Mat()' collect2: error: ld returned 1 exit status

・試したこと
最初は#opencv2/opencv.hppが読み込めなかったので以下のことをしました。
・c_cpp_properties.jsonの"includePath"に"/usr/local/include/opencv4tasks.json"を追加。
・tasks.jsonの"task"の"args"に"-I","/usr/local/include/opencv4"を追加。
opencv.hppは読み込めていると思われのですが、なぜundefined reference to `cv::Mat::~Mat()のようなエラーが出てくるのかがよく分かりません。

解決策など教えて頂けたら幸いです。

・以下、ソースコード

//階層構造 q |--.vscode | |--c_cpp_properies.json | |--launch.json | |--tasks.json | |--test01.cpp |--fruits.jpg

c++

1//test01.cpp 2#include <opencv2/opencv.hpp> 3int main(int argc, char** argv) { 4 cv::Mat img; 5 6 img = cv::imread(argv[1],-1); 7 8 cv::imshow("title", img); 9 cv::waitKey(0); 10 11 return 0; 12}
//c_cpp_properies.json { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/local/include/opencv4" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "gnu17", "cppStandard": "gnu++14", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }
//launch.json { "version": "0.2.0", "configurations": [ { "name":"Launch Program", "type":"cppdbg", "program":"${fileDirname}/${fileBasenameNoExtension}", "miDebuggerPath": "/usr/bin/gdb", "request":"launch", "MIMode": "gdb", "args": ["${workspaceFolder}/fruits.jpg"], "cwd": "${fileDirname}" } ] }
//tasks.json { "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ アクティブなファイルのビルド", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-I", "/usr/local/include/opencv4", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": "build", "detail": "コンパイラ: /usr/bin/g++" } ] }
melian👍を押しています

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

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

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

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

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

melian

2022/07/12 08:32

OpenCV4 のライブラリをリンクする必要があります。pkg-config コマンドがインストールされていれば、それを利用するとよいかと思います。
yutty

2022/07/12 10:44

ありがとうございます。無事に解決しました!
guest

回答1

3

自己解決

無事に解決しました!!
/usr/lib/pkgconfig/opencv.pcというファイル(参考4)を作成した後に、
tasks.jsonの"task"の"args"に"pkg-config","--libs","--cflags","opencv"と加えると無事にビルドできました。opencvのインクルードパスとライブラリのオプションの結果をargsに与えることが必要だったようです。なお、"-I", "/usr/local/include/opencv4"は不要ですのでtasks.jsonから削除する必要があるようです。

以下、解決の参考になったリンクです。
ご参考になれば幸いです。
参考1
参考2
参考3
参考4

投稿2022/07/12 10:17

編集2022/07/12 10:52
yutty

総合スコア12

Bearded-Ockham, melian, Bull👍を押しています

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.54%

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

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

質問する

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

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

OpenCV

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

Ubuntu

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

C++

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