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

所以,我找到了一种可能的方法,但我不确定他们是否是这样做的。

我最终修补了 Makefile,不是为这些库使用动态链接器,而是链接到它们的静态 .a 文件。我用一个简单的 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 上移植。

如果您想要构建脚本,请 PM 我。

最好的,尼古拉斯

于 2013-10-13T18:44:31.263 回答