2013-10-10 14 views
0

如果我看的股票PHP PHP的配置选项,我看到使用libpng,libjpeg和libfreetype建立与一些神奇的选项中启用:什么是文件夹/ BinaryCache/MacOSX上(当编译PHP)

'--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',它始终会生成一个与我的自定义库链接的二进制文件。这可能与以下消息时每次都遇到:

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目录,它有什么作用?

由于提前, 萨科

回答

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 

我结束了,这不是动态再联系到dylibs在/用户/尼古拉斯/文档/ git的/ PHP的二进制/ staticlib/lib中/,现在在便携式相同版本的MacOSX。

PM如果你想要构建脚本。

最佳, 萨科