概要
OpenCVを初めて利用する者です。
OpenCVの最新版(2019/4現在)であるver4.0.1を自分のMacに導入して、C++での環境を構築しようと考えているところ、うまくいかないことがあったので質問させていただきました。
症状
以下のコード(main.cpp)をまず実行したいと考えております。
#include <opencv2/opencv.hpp> int main(){ cv::Mat a = cv::imread("img.jpg", 1); cv::imshow("hello", a); cv::waitKey(); }
Homebrewで
brew install pkg-config brew install opencv
とダウンロードを進め、対象コードのディレクトリで
g++ `pkg-config --libs --cflags opencv4` main.cpp
を実行しました。すると、
Undefined symbols for architecture x86_64: "cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from: _main in ccEnGkIv.o "cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from: _main in ccEnGkIv.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status
というエラーが発生します。これの解決法を教えて欲しいです。どうかお願いします。
追加情報
pkg-configのコマンドは正しく動いていると考えています。
$ pkg-config --libs --cflags opencv4 -I/usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv -I/usr/local/Cellar/opencv/4.0.1/include/opencv4 -L/usr/local/Cellar/opencv/4.0.1/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
また、一行目でエラーを出していないことから<opencv2/opencv.hpp>
が発見できていない訳ではなさそうです。ですが、インクルードができているのになぜ失敗するのかがわかりません。<opencv2/highgui.hpp>や<opencv2/core.hpp>などもインクルードしてみても結果は変わりません。バージョンの違いのせいでしょうか?それともそもそも何かが間違っているのでしょうか?
あなたの回答
tips
プレビュー