ブログ - PHPのコンパイルエラーと戦う

MacPortsでPHP+apacheをこんな風にインストールしていたのだけれどPHPのコンパイルが通らない.
/opt/local/bin/port install php52 @5.2.11 +apache2+mysql5こんなエラーがでて止まる.Google先生に聞いてもヒントが無い.
"configure: error: Problem with freetype.(a|so)."
MacPortsのエラーメッセージでmain.logファイルが表示されるのでこればかり見ていたので解決に時間がかかった.
/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.
macports.org_release_ports_lang_php52/php52/main.log
実はconfigureログを見ればもっとより具体的にエラーがでている.
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.
macports.org_release_ports_lang_php52/php52/work/php-5.2.17/config.log
これを見ると不思議なメッセージが.
ld: warning: in /usr/local/lib/libfreetype.dylib, file was built for ppc
実際,
file /usr/local/lib/libfreetype.dylibとすると,
/usr/local/lib/libfreetype.dylib: Mach-O dynamically linked shared library ppc
と表示.あれれ?
file /opt/local/lib/libfreetype.dylibとすれば,
/opt/local/lib/libfreetype.dylib: Mach-O 64-bit dynamically linked shared library x86_64
と返ってくる.つまりMacPortsで参照されるべきなのは/opt/local/libなのに,/usr/local/libを見ていたというオチ.
そこで直接ライブラリ参照先を指定しようと,こんな感じでconfigureパラメータをエディット.
/opt/local/bin/port edit php52
しかし認識されない.
MacPortsだとライブラリ関係は/opt/local/libに入るのだけれど,configureで参照されるライブラリが/usr/local/libになっているという点.
LD_LIBRARY_PATHにあたるものがMacOS XだとDYLD_LIBRARY_PATHなのでこれを設定するも優先されない. それで何をしたかというと,
mv /usr/local/lib /usr/local/lib.old
大胆すぎる!でもファイルの中身を見ているとPowerPC用だったり2008年とか2009年の物だったりと,昔mac miniで動かしていたときの名残りのライブラリが残っていた模様.
そしてコンパイル&インストールは問題なく完了するのだけれど,/opt/local/apache2/bin/apachectl startするとエラーが...
httpd: Syntax error on line 119 of /opt/local/apache2/conf/httpd.conf:実は/opt/localにMacPortsで入れたJPEGライブラリも古くて,MacOS Xのライブラリをハードリンクする事でどうにかApacheが起動する様になりました.
Cannot load /opt/local/apache2/modules/libphp5.so into server:
dlopen(/opt/local/apache2/modules/libphp5.so, 10):
Symbol not found: __cg_jpeg_resync_to_restart\n
Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A
/Frameworks/ImageIO.framework/Versions/A/ImageIO\n
Expected in: /opt/local/lib/libjpeg.9.dylib\n in /System/Library/Frameworks/ApplicationServices.
framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
cd /opt/local/lib
mv libJPEG.dylib libJPEG.dylib.old
mv ibTIFF.dylib ibTIFF.dylib.old
mv ibPng.dylib ibPng.dylib.old
ln -s /System/Library/Frameworks/ApplicationServices.framework/Versions
/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib libjpeg.dylib
ln -s /System/Library/Frameworks/ApplicationServices.framework/Versions
/A/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib libtiff.dylib
ln -s /System/Library/Frameworks/ApplicationServices.framework/Versions
/A/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib libpng.dylib
調べてみて判ったのはlibjpeg関連ってバージョンアップとかで困っている人が多いと言う事だな...