I have the following problem. On UNIX, PHP fails to link with
a static library generated by Libtool. Problem occurs with PHP 4.1.0
but not PHP 4.0.6. The YAZ extension, for example, which I maintain
generates by default a static Libtool library only. So After doing
   cd yaz-1.8.3
   ./configure --prefix=/usr
   make
   make install

two files are created, namely /usr/lib/libyaz.a and /lib/lib/libyaz.la.

For PHP I do : 
   ./configure --with-yaz [other options]

and get the folloing make output:
..
/bin/sh ../libtool --silent --mode=link gcc  -g -O2 -prefer-pic  -o libZend.la  -ldl 
-lyaz -lcrypt -lresolv -lm -ldl -lnsl  -lresolv 
-lcrypt  zend_language_parser.lo zend_language_scanner.lo zend_ini_parser.lo 
zend_ini_scanner.lo zend_alloc.lo zend_compile.lo zend_c
onstants.lo zend_dynamic_array.lo zend_execute.lo zend_execute_API.lo 
zend_highlight.lo zend_llist.lo zend_opcode.lo zend_operators.l
o zend_ptr_stack.lo zend_stack.lo zend_variables.lo zend.lo zend_API.lo 
zend_extensions.lo zend_hash.lo zend_list.lo zend_indent.lo z
end_builtin_functions.lo zend_sprintf.lo zend_ini.lo  
make[1]: Leaving directory `/home/adam/proj/php-4.1.0/Zend'
...
/bin/sh /home/adam/proj/php-4.1.0/libtool --silent --mode=link gcc  -I. 
-I/home/adam/proj/php-4.1.0/ -I/home/adam/proj/php-4.1.0/main
 -I/home/adam/proj/php-4.1.0 -I/home/adam/proj/apache/include 
-I/home/adam/proj/php-4.1.0/Zend -I/home/adam/proj/php-4.1.0/ext/mysql/
libmysql -I/home/adam/proj/php-4.1.0/ext/xml/expat  -DLINUX=22 -DUSE_HSREGEX 
-DUSE_EXPAT -I/home/adam/proj/php-4.1.0/TSRM -g -O2 -pre
fer-pic   -o libphp4.la -rpath /home/adam/proj/php-4.1.0/libs -avoid-version   stub.lo 
 Zend/libZend.la sapi/apache/libsapi.la main/l
ibmain.la regex/libregex.la ext/mysql/libmysql.la ext/pcre/libpcre.la 
ext/posix/libposix.la ext/session/libsession.la ext/standard/li
bstandard.la ext/xml/libxml.la ext/yaz/libyaz.la TSRM/libtsrm.la -ldl -lyaz -lcrypt 
-lresolv -lm -ldl -lnsl -lresolv -lcrypt
/usr/lib/libyaz.a(odr_bool.o): In function `odr_bool':
/home/adam/proj/yaz/odr/odr_bool.c(.text+0x0): multiple definition of `odr_bool'
Zend/.libs/libZend.al(odr_bool.o)(.text+0x0):/home/adam/proj/yaz/odr/odr_bool.c: first 
defined here
/usr/lib/libyaz.a(ber_bool.o): In function `ber_boolean':
[many more multiple symbols]

The log indicates that all YAZ symbols are included twice. Apparenly the
Zend link step includes YAZ verbatim even though NO symbols should be needed
to built that.

Solutions / work-arounds:

1) removing /usr/lib/libyaz.la makes it work. Suddenly, the Zend link step
   doesn't include YAZ so everything is fine. Libtool bug?

2) removing the linkage of yaz from the Zend link step obviously makes it
   work too.

3) build shared YAZ objects is a fix too. (./configure --enabled-shared for YAZ).

The problem doesn't occur with PHP 4.0.6. Probably due to the fact that
it uses libtool 1.3.5.

The problem currently only exists with YAZ (I guess most other packages
are shared objects ONLY). But it would really be convenient if extensions
could use static libraries as well.

If this is a libtool bug and there's no easy fix for that, my suggestion would be
that Zend doesn't link with YAZ or other extension libraries. Fix 2) above.

-- Adam

-- 
Adam Dickmeiss  mailto:[EMAIL PROTECTED]  http://www.indexdata.dk
Index Data      T: +45 33410100           Mob.: 212 212 66

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to