環境: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++" } ] }
回答1件