正確には、プログラムを修復したのではなく、ビルドするための環境を修復したのだが。

最初にプログラムを書いたのは、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や他の画像ライブラリがあるらしいのである。

投稿者 sukarabe

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です