什么导致 Automake 崩溃?

什么导致 Automake 崩溃?

从互联网上下载开源软件时(在本例中为 PHP 5.5.5),它们通常会附带一个 Automake“脚本”(如果我可以称之为脚本),用于从源代码进行构建。

现在我尝试针对不同的体系结构进行交叉编译,但每当我指定不同的 ./configure --switch 时,我都会收到不同的错误。通常,此错误是一条简短的非描述性消息,除了开发人员之外,对其他人来说毫无意义。

检查“flock 结构是否符合 linux 顺序”... configure:错误:在“/usr/src/hd/lib/php-5.5.5”中:configure:错误:交叉编译时无法运行测试程序

其次是:

有关详细信息,请参阅“config.log”

所以我输入:

猫./config.log

但实际上,它向我展示的唯一不寻常的东西是:

配置:退出 1

--

那么到底发生了什么?我怎么知道问题出在哪里?

仅供参考,我的配置选项看起来有点像这样:

./configure --prefix="`pwd`/install/" \
--build="i386-pc-linux-gnu" \
--host="mips-linux-gnu" \
--target="mips-linux-gnu" \
--with-libxml-dir="/usr/src/hd/lib/libxml2-2.7.8/install/" \
--enable-soap \
CC="mips-linux-gnu-gcc" \
CFLAGS="-O2 -EL -march=74kf" \
CPP="mips-linux-gnu-cpp" \
CPPFLAGS="-I$CROSS_ROOTFS/include" \
CXX="mips-linux-gnu-g++" \
CXXFLAGS="-O2 -EL -march=74kf" \
CXXCPP="mips-linux-gnu-cpp" \
AR="mips-linux-gnu-ar" \
RANLIB="mips-linux-gnu-ranlib" \
AS="mips-linux-gnu-as" \
NM="mips-linux-gnu-nm" \
LD="mips-linux-gnu-ld" \
LDFLAGS="-L$CROSS_ROOTFS/lib" \
ADDR2LINE="mips-linux-gnu-addr2line"

您可能不知道,我正在使用 CodeSourcery 工具链对 mips 进行交叉编译。我知道我不需要指定所有变量(例如 RANLIB),但我不知道这有什么坏处。

更新

问题似乎出在一个(或多个)捆绑扩展中,如下所示:http://php.net/manual/en/extensions.membership.php

使用 --disable-all 配置有效。但显然,我确实需要至少一些捆绑的扩展才能完成一些实际工作。

但是,我怎么知道哪一个呢?

更新

我把问题缩小到了默认启用的扩展 OPcache(参见:https://www.php.net/manual/en/opcache.installation.php)。禁用该扩展后,它可以成功编译,同时禁用一些其他扩展,但这些扩展在我的目标系统上无法工作。

不过,这对我来说一点也不明显。我所做的就是从输出日志开始逆向操作,逐个禁用列出的扩展,直到这个愚蠢的东西最终起作用。

肯定存在更好的方法来查明这些问题吧?否则 automake 的这种无稽之谈到底有什么意义呢?

答案1

要求opscachelibtdlGNU Libtool

Linux

在 Linux 上,获取libltdl-dev包,例如在 Ubuntu 上:

$ sudo apt-get install libltdl-dev

苹果电脑

对于 OSX,安装 GNU Libtool 最简单的方法是通过自制

$ brew install libtool

具体来说,GNU Libtool 将提供以下用于 PHP 编译的文件

/usr/local/lib/libltdl.dylib
/usr/local/lib/libltdl.a
/usr/local/lib/libltdl.7.dylib

顺便提一下,OSX 附带了自己的 libtool 副本,其中不包含 libtdl 接口。为了避免冲突,GNU Libtool 工具以“g”为前缀,glibtool例如glibtoolize

更多信息,请参阅http://www.gnu.org/software/libtool/manual/html_node/Libltdl-interface.html

相关内容