##目的
C++でOpenCVを使う際に、コンパイルしたときエラーが出たので解決した。
環境
-Ubuntu 18.04
##エラー内容
エラーログ取り忘れたので悲しいけど、undefined reference
っていうエラーが出ました。
ここを見てもらうとわかりますが、リンカーが問題らしいです。詳しくはあまりわかりませんが。
コンパイルする際にこのようにするとうまくいきます。
```g++ -o test_1 test_1.cpp pkg-config opencv --cflags --libs
でも直近でopencvを使ったコードをコンパイルするときは実行時間のリンクの問題?があるらしいので、エラー回避のため、`sudo ldconfig`を実行すればよいそうです。
まあここまでは[参考URL](#OpenCV)を見てもらえばいいかなと思います。
##Shell Scriptでまとめた
しかし、いちいち`g++`から始まるコードを打つのは面倒くさいと感じたので、shell scriptを使って楽をしちゃいました。ファイル名はopencv.shという名前にしています。
```shell
#!/bin/bash
PARAM=${1:?}
if [ $# -ne 1 ]; then
echo "Designated argument is $#." 1>&2
echo "Need 1 argument to execute." 1>&2
exit 1
fi
g++ -o $PARAM $PARAM.cpp `pkg-config opencv --cflags --libs`
短いので見た通りなのですが、PARAMで引数を取って、ifの部分は引数に関するエラー処理(もし引数が1つじゃなかった場合の話です)、メインのg++
の部分が今回使うコンパイルのコードです。
コードからもわかる通り、$PARAMにはcppが入っちゃいけないので、cpp抜きのファイル名を入れます。
使用例
./opencv.sh test
で、これは
```g++ -o test test.cpp pkg-config opencv --cflags --libs
と同義です。
##参考URL
<a name="OpenCV">
Cannot get OpenCV to compile because of undefined references?
https://stackoverflow.com/questions/24337932/cannot-get-opencv-to-compile-because-of-undefined-references
</a>