什么是MacOSX上的文件夹/ BinaryCache /(编译php时)

时间:2013-10-10 18:42:48

标签: php macos compiler-construction linker

如果我查看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上重新编译php(php5.4,不,我不想使用Mamp),而且我不想发送自定义库,如freetype,jpeg和png。理想情况下,这些库与二进制文件静态链接,并且/ usr / lib中放置的“常见”库更动态地链接。

由于某种原因,它不起作用。即使使用'./configure --enable-static'或'./configure --enable-static = yes',它也会生成一个与我的自定义lib链接的二进制文件。它可能与我每次都得到的以下消息有关:

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目录以及它做了什么?

提前致谢, 尼古拉斯

1 个答案:

答案 0 :(得分: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上移植。

如果你想要构建脚本,请告诉我。

最佳, 尼古拉斯