今天在安装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
有时:
|-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的位操作符有待深入研究,目前先把脚本跑起来再说。