実現したいこと
Opencvの関数を使えるようにする。
Windows11,VSCode,Opencv4.10
発生している問題・分からないこと
インテリセンスではOKなのに、Opencvのコンパイルが通らない。
「ワークスペースで問題は検出されていません。」とは出ているが、コンパイルが通らない。
エラーメッセージ
error
1PS C:\Users\ユーザー\Desktop\vscode\main\Code> cd "c:\Users\ユーザー\Desktop\vscode\main\Code\" ; if ($?) { g++ main.cpp -o main } ; if ($?) { .\main } 2C:/Program Files (x86)/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ユーザー\AppData\Local\Temp\cc7gCc3n.o:main.cpp:(.text+0x99): undefined reference to `cv::Mat::Mat()' 3C:/Program Files (x86)/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\ユーザー\AppData\Local\Temp\cc7gCc3n.o:main.cpp:(.text+0xa5): undefined reference to `cv::Mat::~Mat()' 4collect2.exe: error: ld returned 1 exit status
該当のソースコード
cpp
1//以下main.cpp 2#include <opencv2/opencv.hpp> 3#include "otherlib/sum.h" 4 5//using namespace cv; 6 7int main(int argc, char **argv) 8{ 9 int value; 10 value = sum(50,100); 11 printf("%d\n",value); 12 13 cv::Mat image; 14 //Mat image = Mat::zeros(100, 100, CV_8UC3); 15 //imshow("", image); 16 //waitKey(0); 17 //return 0; 18} 19 20 21int sum(int min,int max){ 22 int num; 23 num = (min + max) * (max - min+1) / 2; 24 return num; 25} 26 27
cpp
1//以下sum.h 2int sum(int min,int max);
json
1//以下c_cpp_properties.json 2{ 3 "configurations": [ 4 { 5 "name": "Win32", 6 "includePath": [ 7 "${workspaceFolder}", 8 "C:\\Program Files (x86)\\mingw64\\include", 9 //ここにインクルードしたいパスを入力する 10 "C:\\Users\\ユーザー\\Desktop\\vscode\\main\\Code" 11 //"C:\\Users\\ユーザー\\Desktop\\vscode\\main\\Code\\opencv2" 12 ], 13 "defines": [ 14 "_DEBUG", 15 "UNICODE", 16 "_UNICODE" 17 ], 18 "windowsSdkVersion": "8.1", 19 "compilerPath": "C:\\Program Files (x86)\\mingw64\\bin\\g++.exe", 20 "cStandard": "c11", 21 "cppStandard": "c++17", 22 "intelliSenseMode": "clang-x64" 23 } 24 ], 25 "version": 4 26} 27 28 29
json
1//以下tasks.json 2{ 3 "tasks": [ 4 { 5 "type": "cppbuild", 6 "label": "C/C++: g++.exe アクティブなファイルのビルド", 7 "command": "C:\\Program Files (x86)\\mingw64\\bin\\g++.exe", 8 "args": [ 9 "-fdiagnostics-color=always", 10 "-g", 11 "${file}", 12 "-o", 13 "${fileDirname}\\${fileBasenameNoExtension}.exe", 14 "opencv" 15 //デバッグ用の情報の生成(-g) 16 //コンパイル対象となる.cppファイルの指定(-c + .cppファイル名) 17 //必要なヘッダファイルの存在するパスの指定(-I + パス名) 18 ], 19 "options": { 20 "cwd": "${fileDirname}" 21 }, 22 "problemMatcher": [ 23 "$gcc" 24 ], 25 "group": { 26 "kind": "build", 27 "isDefault": true 28 }, 29 "detail": "デバッガーによって生成されたタスク。" 30 } 31 ], 32 "version": "2.0.0" 33}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
main.cpp以外の別のヘッダファイルを読み込むこんでビルドしてプログラムを再生するのには成功した。(読み込まなくてもopencvのライブラリを使わなければビルド可能)
opencv.hppの中身の、リンク先を変えたりすると、インテリセンスでエラーがでます。
なので、インテリセンスは正しく動いているものと思われます。
Opencvはwindows用をインストールしました。
環境設定でopencvのbinとlibとincludeまでのパスの3つを追加しました。
個人的にはtasks.jsonのargsが怪しいとは思っていますが、知識が足りなくてこれ以上何をしたらいいか分かりません。
補足
VScodeは日本語化しています。