0

ストック PHP の PHP 構成オプションを見ると、libpng、libjpeg、および libfreetype がいくつかの魔法のオプションで有効になっていることがわかります。

'--with-freetype-dir=/BinaryCache/apache_mod_php/apache_mod_php-79.1~2/Root/usr/local'
'--with-jpeg-dir=/BinaryCache/apache_mod_php/apache_mod_php-79.1~2/Root/usr/local'
'--with-png-dir=/BinaryCache/apache_mod_php/apache_mod_php-79.1~2/Root/usr/local'

彼らは奇妙なフォルダー /BinaryCache/ を指していますが、これがどのように修正されたのかわかりません。

MacOSX (php5.4、いいえ、Mamp を使用したくない) で php を再コンパイルしようとしていますが、freetype、jpeg、png などのカスタム ライブラリを出荷したくありません。理想的には、これらのライブラリはバイナリに静的にリンクされ、/usr/lib に配置されたより「一般的な」ライブラリは動的にリンクされます。

何らかの理由で機能しません。「./configure --enable-static」または「./configure --enable-static=yes」を使用しても、カスタム ライブラリにリンクされたバイナリが常に生成されます。毎回表示される次のメッセージに関連している可能性があります。

checking if cc static flag -static works... no

Otool から次の出力が得られます。

otool -L sapi/cli/php
sapi/cli/php:
/Users/nicolas/Documents/git/php/staticlib/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.2.0)
/Users/nicolas/Documents/git/php/staticlib/lib/libfreetype.6.dylib (compatibility version 17.0.0, current version 17.2.0)
/Users/nicolas/Documents/git/php/staticlib/lib/libpng16.16.dylib (compatibility version 23.0.0, current version 23.0.0)
/Users/nicolas/Documents/git/php/staticlib/lib/libjpeg.9.dylib (compatibility version 10.0.0, current version 10.0.0)

何かアドバイス?/BinaryCache ディレクトリにアクセスするにはどうすればよいですか?

前もって感謝します、ニコラス

4

1 に答える 1

0

それで、私は可能な方法を見つけましたが、これが彼らがそれをした方法であるかどうかはわかりません.

これらのライブラリに動的リンカーを使用するのではなく、代わりに静的 .a ファイルにリンクするために、Makefile にパッチを適用することになりました。簡単な SED コマンドでこれを実現しました。

sed -e '/^EXTRA_LIBS =/ s/ -lpng//' \
    -e '/^EXTRA_LIBS = / s/ -ljpeg//' \
    -e '/^EXTRA_LIBS = / s/ -lintl//' \
    -e '/^EXTRA_LIBS = / s/ -lfreetype//' \
    -e "/^EXTRA_LDFLAGS =/ s/.*/EXTRA_LDFLAGS = \$(shell find ..\/staticlib\/lib -iname '*.a' -type f) -framework CoreFoundation/" \
    -e "/^EXTRA_LDFLAGS_PROGRAM =/ s/.*/EXTRA_LDFLAGS_PROGRAM = \$(shell find ..\/staticlib\/lib -iname '*.a' -type f) -framework CoreFoundation/" \
    $phpname/Makefile >$phpname/Makefile.edit

mv -f $phpname/Makefile.edit $phpname/Makefile

./configure スクリプトは、ライブラリを検出してアクティブ化することでその役割を果たしましたが、リンカに -lpng、-ljpeg、-lintl、および -lfreetype フラグを省略し、代わりにこれらのライブラリの *.a ファイルにリンクするように指示するだけです。 (../staticlib フォルダーにビルドしました)。find コマンドの出力は次のとおりです。

staticlib/lib/libasprintf.a
staticlib/lib/libfreetype.a
staticlib/lib/libgettextpo.a
staticlib/lib/libintl.a
staticlib/lib/libjpeg.a
staticlib/lib/libpng16.a

/Users/nicolas/Documents/git/php/staticlib/lib/ の dylib に動的にリンクされていないバイナリになり、同じバージョンの MacOSX で移植できるようになりました。

ビルド スクリプトが必要な場合は、私に連絡してください。

最高、ニコラス

于 2013-10-13T18:44:31.263 に答える