今天在安装php-5.3.10时,make报错:

ext/date/php_date.lo is not a valid libtool object。

查看libtool(由ltmain.sh生成)该错误是由于:

if (${SED} -e ‘2q’ $arg | grep “^# Generated by .*$PACKAGE”) >/dev/null 2>&1; then 语句不成立而后续引起的。

正确的lo文件应该如下:

# ext/date/php_date.lo – a libtool object file
# Generated by ltmain.sh – GNU libtool 1.5.26 (1.1220.2.492 2008/01/30 06:40:56)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# Name of the PIC object.
pic_object=none
# Name of the non-PIC object.
non_pic_object=’php_date.o’

初始的5行,是有libtool文件中compile时添加的。在用安装脚本运行configure和make时,经常发现未添加成功。这就导致了后面的错误。

而手工make clean后再 make,就没有问题了。

原因未知。会是因为多核、多进程吗?对Makefile和libtool的执行顺序不是很了解,无法确切定位。

当脚本执行时,查看进程如下:

admin    20630  0.0  0.0  65068  2420 pts/2    R+   15:17   0:00 /bin/sh /data/home/admin/src/php-5.3.10/libtool –silent –preserve-dup-deps –mode=compile gcc -IZend/ -I/data/home/admin/src/php-5.3.10/Zend/ -DPHP_ATOM_INC -I/data/home/admin/src/php-5.3.10/include -I/data/home/admin/src/php-5.3.10/main -I/data/home/admin/src/php-5.3.10 -I/data/home/admin/src/php-5.3.10/ext/date/lib -I/data/home/admin/src/php-5.3.10/ext/ereg/regex -I/usr/include/libxml2 -I/data/home/admin/src/php-5.3.10/ext/mbstring/oniguruma -I/data/home/admin/src/php-5.3.10/ext/mbstring/libmbfl -I/data/home/admin/src/php-5.3.10/ext/mbstring/libmbfl/mbfl -I/usr/local/libmcrypt/include -I/usr/local/mysql//include/mysql -I/usr/local/mysql/include/mysql -I/data/home/admin/src/php-5.3.10/ext/sqlite3/libsqlite -I/data/home/admin/src/php-5.3.10/TSRM -I/data/home/admin/src/php-5.3.10/Zend -I/usr/include -g -O2 -fvisibility=hidden -c /data/home/admin/src/php-5.3.10/Zend/zend_hash.c -o Zend/zend_hash.lo

admin    20636  0.0  0.0  65068  2420 pts/2    R+   15:17   0:00 /bin/sh /data/home/admin/src/php-5.3.10/libtool –silent –preserve-dup-deps –mode=compile gcc -IZend/ -I/data/home/admin/src/php-5.3.10/Zend/ -DPHP_ATOM_INC -I/data/home/admin/src/php-5.3.10/include -I/data/home/admin/src/php-5.3.10/main -I/data/home/admin/src/php-5.3.10 -I/data/home/admin/src/php-5.3.10/ext/date/lib -I/data/home/admin/src/php-5.3.10/ext/ereg/regex -I/usr/include/libxml2 -I/data/home/admin/src/php-5.3.10/ext/mbstring/oniguruma -I/data/home/admin/src/php-5.3.10/ext/mbstring/libmbfl -I/data/home/admin/src/php-5.3.10/ext/mbstring/libmbfl/mbfl -I/usr/local/libmcrypt/include -I/usr/local/mysql//include/mysql -I/usr/local/mysql/include/mysql -I/data/home/admin/src/php-5.3.10/ext/sqlite3/libsqlite -I/data/home/admin/src/php-5.3.10/TSRM -I/data/home/admin/src/php-5.3.10/Zend -I/usr/include -g -O2 -fvisibility=hidden -c /data/home/admin/src/php-5.3.10/Zend/zend_hash.c -o Zend/zend_hash.lo

有时,两个libtool同时运行,且命令完全一致!!查看pstree:

有时:

|-sshd-+-sshd—sshd—bash—install.sh—2*[make—sh—gcc—cc1]

有时:

|-sshd-+-sshd—sshd—bash—install.sh-+-make—sh

|      |                                 `-make—sh—gcc—cc1

这时,再ps axu|grep make,发现居然同时有make和 make install两个命令!!

查看脚本,果然是一个手误造成的错误:

make & make install。&位操作符导致的错误!应该是make && make install。

bash的位操作符有待深入研究,目前先把脚本跑起来再说。

Leave a Reply