正確には、プログラムを修復したのではなく、ビルドするための環境を修復したのだが。
最初にプログラムを書いたのは、2013年頃で、みようみまねで、OpenCVとC++を勉強しながら、何とか動作するプログラムを作成した。その後、2015年頃かな? HomebrewとかXCodeをアップデートした影響だと思うが、コンパイルできなくなってしまった。あれこれ調べて、OpenCVのバージョンを3から2に下げ、ImageMagickもヴァージョン7から6に下げることで、なんとかコンパイルできるようになった。
以上は、すべて2011版のMacBook Airでの話。2020年にMacBook Pro (最後のインテルMacですよ) に変わって、いまでも使ってるのだが、久しぶりに自作のプログラムを起動しようとしたら、ライブラリーが見つからないとかの実行時エラーで動かなかった。なんとか、シンボリックリンクを張り、とりあえず動作するようにはなったが、これでは、プログラムの修正や改良もできない。やれやれ。
一番良いのは、最新の環境にして、一からプログラムを書き換えることだと思うが、もうね、いろんな事を忘れているし、新しいことを覚えるには歳もとりすぎている。ううむ、困る・・・。
ということで、とりあえず、今の環境でプログラムのビルドを可能にしたい。いろいろやったところ、前回と同様に、OpenCVとImageMagickのバージョンを下げることで、成功した。
実は、OpenCVの方は、古いバージョン2を既にhomebrewで入れてある。ただし、リンクは張ってない状態で、Cellarに入っていて、/usr/local/opt/opencv@2 から参照できるようにもなっている。そこで、コンパイルするときに、それを読み込むように Makefile に書く。
INC_OPENCV2_PATH = /usr/local/opt/opencv@2/include LIB_OPENCV2_PATH = /usr/local/opt/opencv@2/lib
そして、これをコンパイルするときに、-I$(INC_OPENCV2_PATH) -L$(LIB_OPENCV2_PATH) として読み込む。
OpenCVは以上でOKなのだが、ImageMagickで困った。何を読み込むのか複雑なため、コンパイルのときに、Magick++-config なるプログラムを実行させて、必要なライブラリなどを取り込むのが普通のようだった。そのため、imagemagick@6 以下にバージョン6を収録するだけでは不十分で、リンクを張る必要がある。
brew link imagemagick@6 --force
で良いと思ったのだが、エラーが出た。曰く、
Linking /usr/local/Cellar/imagemagick@6/6.9.12-42... Error: Could not symlink bin/Magick++-config Target /usr/local/bin/Magick++-config is a symlink belonging to imagemagick. You can unlink it: brew unlink imagemagick To force the link and overwrite all conflicting files: brew link --overwrite imagemagick@6
そこで、
brew unlink imagemagick brew link --overwrite imagemagick@6
とした。
必要ならパスを通せ、というメッセージが出たが、ワタシの場合、それはしなくても大丈夫だった。convert –version などとしてバージョンを調べると、ちゃんと6になっている。これで、ImageMagickのバージョン6にダウングレード出来た。
あとは、以前のMakefileのままでmakeして、警告はいっぱい出るものの、エラーはなくて、なんとかコンパイルに成功した。
次の目標は、OpenCV3とImagemagick7で動作するように、改良することだが、何時になるか。いや、この際、C++ではなく、Pythonに乗り換えるという手もある。Python上にも、OpenCVや他の画像ライブラリがあるらしいのである。