Re: Linking PHP with static Libtool libraries
| From: | Jani Taskinen | Date: | Fri, 14 Dec 2001 17:44:28 +0000 |
| Subject: | Re: Linking PHP with static Libtool libraries | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-73770@lists.php.net to get a copy of this message | ||
Does this happen with latest CVS?
--Jani
On Fri, 14 Dec 2001, Adam Dickmeiss wrote:
>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
>
>