#OpenCVプログラムを実行したいのですが、コンパイル時にリンカーエラー?が表示されコンパイルできません。
こちらのサイトを参考に、OpenCV 3.4.7とOpenCV 4.1.1両方の環境を整え、
参考にしたサイトのサンプルプログラム
C++
1#include "opencv2/opencv.hpp" 2 3int main(int argh, char* argv[]) 4{ 5 cv::VideoCapture cap(0);//デバイスのオープン 6 //cap.open(0);//こっちでも良い. 7 8 if(!cap.isOpened())//カメラデバイスが正常にオープンしたか確認. 9 { 10 //読み込みに失敗したときの処理 11 return -1; 12 } 13 14 cv::Mat frame; //取得したフレーム 15 while(cap.read(frame))//無限ループ 16 { 17 // 18 //取得したフレーム画像に対して,クレースケール変換や2値化などの処理を書き込む. 19 // 20 21 cv::imshow("win", frame);//画像を表示. 22 const int key = cv::waitKey(1); 23 if(key == 'q'/*113*/)//qボタンが押されたとき 24 { 25 break;//whileループから抜ける. 26 } 27 else if(key == 's'/*115*/)//sが押されたとき 28 { 29 //フレーム画像を保存する. 30 cv::imwrite("img.png", frame); 31 } 32 } 33 cv::destroyAllWindows(); 34 return 0; 35}
を「webcam.cpp」というファイル名で保存し、makefileを実行しました。
makefile
1# コンパイラの指定 2CC = g++ 3# インクルードファイル等 4CFLAGS = `pkg-config opencv --cflags` `pkg-config opencv --libs` -I/usr/local/include 5LDFLAGS = -L/usr/local/lib 6INCLUDE = 7# 実行ファイル名 8TARGETS = webcam 9# make all 10all:clean $(TARGETS) 11# compile 12webcam: webcam.cpp 13 $(CC) $(CFLAGS) -o webcam webcam.cpp $(INCLUDE) $(LDFLAGS) -lopencv_core -lopencv_videoio -lopencv_highgui -lm 14# make clean 15clean: 16 rm -f *.o *~ $(TARGETS)
そうすると、
❯ make ✘ 2
rm -f *.o *~ webcam
g++ pkg-config opencv --cflags
pkg-config opencv --libs
-I/usr/local/include -o webcam webcam.cpp -L/usr/local/lib -lopencv_core -lopencv_videoio -lopencv_highgui -lm
/tmp/cc8VH7I3.o: 関数 main' 内: webcam.cpp:(.text+0x38):
cv::VideoCapture::VideoCapture(int)' に対する定義されていない参照です
webcam.cpp:(.text+0xf1): cv::imshow(cv::String const&, cv::_InputArray const&)' に対する定義されていない参照です webcam.cpp:(.text+0x194):
cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)' に対する定義されていない参照です
/tmp/cc8VH7I3.o: 関数 cv::String::String(char const*)' 内: webcam.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x54):
cv::String::allocate(unsigned long)' に対する定義されていない参照です
/tmp/cc8VH7I3.o: 関数 cv::String::~String()' 内: webcam.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14):
cv::String::deallocate()' に対する定義されていない参照です
/tmp/cc8VH7I3.o: 関数 cv::String::operator=(cv::String const&)' 内: webcam.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28):
cv::String::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
makefile:13: recipe for target 'webcam' failed
make: *** [webcam] Error 1
のようなリンカーエラー?が表示されます。
解決方法を一通り調べましたが、いずれの方法を試しても「〜に対する定義されていない参照です」か、極稀に「シンボル〜への未定義参照です」のようなエラーを吐きます。
C++やOpenCVを触るのは初めてです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー