【C++】エラー「cv::String::deallocate()’ に対する定義されていない参照」を解決する【include】
C++で画像表示したかったのでopencvを使おうとしたのだけど、最初にopencvをインクルードするところでエラーが出て詰まってしまった
# include <opencv2/opencv.hpp>
↑を入れてコンパイルすると、以下のエラーが出てきた。
/tmp/ccqB7jqo.o: 関数 `cv::String::~String()' 内:
cv.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): `cv::String::deallocate()' に対する定義されていない参照です
/tmp/ccqB7jqo.o: 関数 `cv::String::operator=(cv::String const&)' 内:
cv.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): `cv::String::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
【解決方法】-lopencv_coreを付けてコンパイルする
原因としてはopencvのパスなどのリンクが上手くできていないことが考えられる。
色々調べた結果以下のようなオプションを付けることでエラーが解決したというコメントを見つけた。
-lopencv_videoio -lopencv_imgcodecs -lopencv_core -lopencv_imgproc -lopencv_features2d -lopencv_flann -lopencv_video -lopencv_calib3d -lopencv_highgui
undefined reference to 'cv::String::allocate(unsigned long)' · Issue #8 · chili-epfl/qml-cvcamera
cvcamera.o: In function cv::String::String(char const*)': /usr/local/include/opencv2/core/cvstd.hpp:602: undefined reference to cv::String::allocate(unsigned lo...
↓のオプション(-lopencv_core)をつければエラーが出なくなった。
-lopencv_core
コンパイル時のコマンドは以下のようにする。
g++ [file_name] -lopencv_core
[file_name]はコンパイルしたいファイル名にする。
人気記事
人気記事はこちら。