今天在安装php-5.3 .10 时,make报错:
ext /date/php_date.lo is not a valid libtool object。
查看libtool(由ltmain.sh生成)该错误是由于:
if (${SED } -e ’2 q’ $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 的位操作符有待深入研究,目前先把脚本跑起来再说。