ID:               29860
 Comment by:       francis at web-resources dot org
 Reported By:      rjanson at msn dot com
 Status:           No Feedback
 Bug Type:         Compile Failure
 Operating System: Redhat 9
 PHP Version:      5.0.1
 New Comment:

I had the same problem, but I solve it with this options:

./configure \
--with-mysql=shared,/path/to/mysql_config \
--with-mysqli=shared,/path/to/mysql_config

specifying "shared" tag, make and make install finish good. You must
take care, you get 2 modules mysql.so and mysqli.so that you must
include in your php.ini with extension=mysql.so and extension=mysqli.so


Previous Comments:
------------------------------------------------------------------------

[2005-12-03 02:29:21] brian at cpanel dot net

I've looked at this a while and maybe my comments can help.  I was able
to reproduce this problem most machines with mysql 4.1 and using only
--with-mysql and --with-mysqli and --with-apxs. This particular machine
is a normal centos machine.

As mentioned earlier, -lmysqlclient is listed twice in EXTRA_LIBS in
the Makefile.  This normally doesnt make a difference.  However, in
this case, removing the 2nd -lmysqlclient causes it to build properly.


This is the libtool command that fails:

/bin/sh /home/cpapachebuild/buildapache/php-5.0.5/libtool --silent
--preserve-dup-deps --mode=link gcc -g -O2 -prefer-non-pic  -rpath
/home/cpapachebuild/buildapache/php-5.0.5/libs -avoid-version -module
-L/usr/lib/mysql  -R /usr/lib/mysql ext/libxml/libxml.lo
ext/ctype/ctype.lo ext/dom/php_dom.lo ext/dom/attr.lo
ext/dom/document.lo ext/dom/domerrorhandler.lo ext/dom/domstringlist.lo
ext/dom/domexception.lo ext/dom/namelist.lo
ext/dom/processinginstruction.lo ext/dom/cdatasection.lo
ext/dom/documentfragment.lo ext/dom/domimplementation.lo
ext/dom/element.lo ext/dom/node.lo ext/dom/string_extend.lo
ext/dom/characterdata.lo ext/dom/documenttype.lo
ext/dom/domimplementationlist.lo ext/dom/entity.lo ext/dom/nodelist.lo
ext/dom/text.lo ext/dom/comment.lo ext/dom/domconfiguration.lo
ext/dom/domimplementationsource.lo ext/dom/entityreference.lo
ext/dom/notation.lo ext/dom/xpath.lo ext/dom/dom_iterators.lo
ext/dom/typeinfo.lo ext/dom/domerror.lo ext/dom/domlocator.lo
ext/dom/namednodemap.lo ext/dom/userdatahandler.lo ext/iconv/iconv.lo
ext/mysql/php_mysql.lo ext/mysqli/mysqli.lo ext/mysqli/mysqli_api.lo
ext/mysqli/mysqli_prop.lo ext/mysqli/mysqli_nonapi.lo
ext/mysqli/mysqli_fe.lo ext/mysqli/mysqli_report.lo
ext/mysqli/mysqli_repl.lo ext/pcre/pcrelib/pcre_chartables.lo
ext/pcre/pcrelib/pcre_compile.lo ext/pcre/pcrelib/pcre_config.lo
ext/pcre/pcrelib/pcre_dfa_exec.lo ext/pcre/pcrelib/pcre_exec.lo
ext/pcre/pcrelib/pcre_fullinfo.lo ext/pcre/pcrelib/pcre_get.lo
ext/pcre/pcrelib/pcre_globals.lo ext/pcre/pcrelib/pcre_info.lo
ext/pcre/pcrelib/pcre_maketables.lo ext/pcre/pcrelib/pcre_ord2utf8.lo
ext/pcre/pcrelib/pcre_printint.lo ext/pcre/pcrelib/pcre_refcount.lo
ext/pcre/pcrelib/pcre_study.lo ext/pcre/pcrelib/pcre_tables.lo
ext/pcre/pcrelib/pcre_try_flipped.lo
ext/pcre/pcrelib/pcre_ucp_findchar.lo
ext/pcre/pcrelib/pcre_valid_utf8.lo ext/pcre/pcrelib/pcre_version.lo
ext/pcre/pcrelib/pcre_xclass.lo ext/pcre/php_pcre.lo ext/posix/posix.lo
ext/session/session.lo ext/session/mod_files.lo ext/session/mod_mm.lo
ext/session/mod_user.lo ext/simplexml/simplexml.lo ext/spl/php_spl.lo
ext/spl/spl_functions.lo ext/spl/spl_engine.lo ext/spl/spl_iterators.lo
ext/spl/spl_array.lo ext/spl/spl_directory.lo ext/spl/spl_sxe.lo
ext/sqlite/sqlite.lo ext/sqlite/sess_sqlite.lo
ext/sqlite/libsqlite/src/opcodes.lo ext/sqlite/libsqlite/src/parse.lo
ext/sqlite/libsqlite/src/encode.lo ext/sqlite/libsqlite/src/auth.lo
ext/sqlite/libsqlite/src/btree.lo ext/sqlite/libsqlite/src/build.lo
ext/sqlite/libsqlite/src/delete.lo ext/sqlite/libsqlite/src/expr.lo
ext/sqlite/libsqlite/src/func.lo ext/sqlite/libsqlite/src/hash.lo
ext/sqlite/libsqlite/src/insert.lo ext/sqlite/libsqlite/src/main.lo
ext/sqlite/libsqlite/src/os.lo ext/sqlite/libsqlite/src/pager.lo
ext/sqlite/libsqlite/src/printf.lo ext/sqlite/libsqlite/src/random.lo
ext/sqlite/libsqlite/src/select.lo ext/sqlite/libsqlite/src/table.lo
ext/sqlite/libsqlite/src/tokenize.lo ext/sqlite/libsqlite/src/update.lo
ext/sqlite/libsqlite/src/util.lo ext/sqlite/libsqlite/src/vdbe.lo
ext/sqlite/libsqlite/src/attach.lo ext/sqlite/libsqlite/src/btree_rb.lo
ext/sqlite/libsqlite/src/pragma.lo ext/sqlite/libsqlite/src/vacuum.lo
ext/sqlite/libsqlite/src/copy.lo ext/sqlite/libsqlite/src/vdbeaux.lo
ext/sqlite/libsqlite/src/date.lo ext/sqlite/libsqlite/src/where.lo
ext/sqlite/libsqlite/src/trigger.lo regex/regcomp.lo regex/regexec.lo
regex/regerror.lo regex/regfree.lo ext/standard/array.lo
ext/standard/base64.lo ext/standard/basic_functions.lo
ext/standard/browscap.lo ext/standard/crc32.lo ext/standard/crypt.lo
ext/standard/cyr_convert.lo ext/standard/datetime.lo
ext/standard/dir.lo ext/standard/dl.lo ext/standard/dns.lo
ext/standard/exec.lo ext/standard/file.lo ext/standard/filestat.lo
ext/standard/flock_compat.lo ext/standard/formatted_print.lo
ext/standard/fsock.lo ext/standard/head.lo ext/standard/html.lo
ext/standard/image.lo ext/standard/info.lo ext/standard/iptc.lo
ext/standard/lcg.lo ext/standard/link.lo ext/standard/mail.lo
ext/standard/math.lo ext/standard/md5.lo ext/standard/metaphone.lo
ext/standard/microtime.lo ext/standard/pack.lo ext/standard/pageinfo.lo
ext/standard/parsedate.lo ext/standard/quot_print.lo
ext/standard/rand.lo ext/standard/reg.lo ext/standard/soundex.lo
ext/standard/string.lo ext/standard/scanf.lo ext/standard/syslog.lo
ext/standard/type.lo ext/standard/uniqid.lo ext/standard/url.lo
ext/standard/url_scanner.lo ext/standard/var.lo
ext/standard/versioning.lo ext/standard/assert.lo
ext/standard/strnatcmp.lo ext/standard/levenshtein.lo
ext/standard/incomplete_class.lo ext/standard/url_scanner_ex.lo
ext/standard/ftp_fopen_wrapper.lo ext/standard/http_fopen_wrapper.lo
ext/standard/php_fopen_wrapper.lo ext/standard/credits.lo
ext/standard/css.lo ext/standard/var_unserializer.lo
ext/standard/ftok.lo ext/standard/sha1.lo ext/standard/user_filters.lo
ext/standard/uuencode.lo ext/standard/filters.lo
ext/standard/proc_open.lo ext/standard/sunfuncs.lo
ext/standard/streamsfuncs.lo ext/standard/http.lo
ext/tokenizer/tokenizer.lo ext/xml/xml.lo ext/xml/compat.lo
TSRM/TSRM.lo TSRM/tsrm_strtok_r.lo TSRM/tsrm_virtual_cwd.lo
main/main.lo main/snprintf.lo main/spprintf.lo main/php_sprintf.lo
main/safe_mode.lo main/fopen_wrappers.lo main/alloca.lo
main/php_scandir.lo main/php_ini.lo main/SAPI.lo main/rfc1867.lo
main/php_content_types.lo main/strlcpy.lo main/strlcat.lo
main/mergesort.lo main/reentrancy.lo main/php_variables.lo
main/php_ticks.lo main/network.lo main/php_open_temporary_file.lo
main/php_logos.lo main/output.lo main/streams/streams.lo
main/streams/cast.lo main/streams/memory.lo main/streams/filter.lo
main/streams/plain_wrapper.lo main/streams/userspace.lo
main/streams/transports.lo main/streams/xp_socket.lo
main/streams/mmap.lo Zend/zend_language_parser.lo
Zend/zend_language_scanner.lo Zend/zend_ini_parser.lo
Zend/zend_ini_scanner.lo Zend/zend_alloc.lo Zend/zend_compile.lo
Zend/zend_constants.lo Zend/zend_dynamic_array.lo
Zend/zend_execute_API.lo Zend/zend_highlight.lo Zend/zend_llist.lo
Zend/zend_opcode.lo Zend/zend_operators.lo Zend/zend_ptr_stack.lo
Zend/zend_stack.lo Zend/zend_variables.lo Zend/zend.lo Zend/zend_API.lo
Zend/zend_extensions.lo Zend/zend_hash.lo Zend/zend_list.lo
Zend/zend_indent.lo Zend/zend_builtin_functions.lo Zend/zend_sprintf.lo
Zend/zend_ini.lo Zend/zend_qsort.lo Zend/zend_multibyte.lo
Zend/zend_ts_hash.lo Zend/zend_stream.lo Zend/zend_iterators.lo
Zend/zend_interfaces.lo Zend/zend_exceptions.lo Zend/zend_strtod.lo
Zend/zend_objects.lo Zend/zend_object_handlers.lo
Zend/zend_objects_API.lo Zend/zend_mm.lo Zend/zend_default_classes.lo
Zend/zend_reflection_api.lo Zend/zend_execute.lo
sapi/apache/sapi_apache.lo sapi/apache/mod_php5.lo
sapi/apache/php_apache.lo main/internal_functions.lo -lcrypt -lcrypt
-lmysqlclient -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm
-lmysqlclient -lz -lcrypt -lnsl -lm -lnss_files -lnss_dns -lresolv
-lnss_files -lnss_dns -lresolv -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm
-lcrypt  -o libphp5.la



libtool ends up executing the following gcc command:

gcc -shared ext/libxml/libxml.lo ext/ctype/ctype.lo ext/dom/php_dom.lo
ext/dom/attr.lo ext/dom/document.lo ext/dom/domerrorhandler.lo
ext/dom/domstringlist.lo ext/dom/domexception.lo ext/dom/namelist.lo
ext/dom/processinginstruction.lo ext/dom/cdatasection.lo
ext/dom/documentfragment.lo ext/dom/domimplementation.lo
ext/dom/element.lo ext/dom/node.lo ext/dom/string_extend.lo
ext/dom/characterdata.lo ext/dom/documenttype.lo
ext/dom/domimplementationlist.lo ext/dom/entity.lo ext/dom/nodelist.lo
ext/dom/text.lo ext/dom/comment.lo ext/dom/domconfiguration.lo
ext/dom/domimplementationsource.lo ext/dom/entityreference.lo
ext/dom/notation.lo ext/dom/xpath.lo ext/dom/dom_iterators.lo
ext/dom/typeinfo.lo ext/dom/domerror.lo ext/dom/domlocator.lo
ext/dom/namednodemap.lo ext/dom/userdatahandler.lo ext/iconv/iconv.lo
ext/mysql/php_mysql.lo ext/mysqli/mysqli.lo ext/mysqli/mysqli_api.lo
ext/mysqli/mysqli_prop.lo ext/mysqli/mysqli_nonapi.lo
ext/mysqli/mysqli_fe.lo ext/mysqli/mysqli_report.lo
ext/mysqli/mysqli_repl.lo ext/pcre/pcrelib/pcre_chartables.lo
ext/pcre/pcrelib/pcre_compile.lo ext/pcre/pcrelib/pcre_config.lo
ext/pcre/pcrelib/pcre_dfa_exec.lo ext/pcre/pcrelib/pcre_exec.lo
ext/pcre/pcrelib/pcre_fullinfo.lo ext/pcre/pcrelib/pcre_get.lo
ext/pcre/pcrelib/pcre_globals.lo ext/pcre/pcrelib/pcre_info.lo
ext/pcre/pcrelib/pcre_maketables.lo ext/pcre/pcrelib/pcre_ord2utf8.lo
ext/pcre/pcrelib/pcre_printint.lo ext/pcre/pcrelib/pcre_refcount.lo
ext/pcre/pcrelib/pcre_study.lo ext/pcre/pcrelib/pcre_tables.lo
ext/pcre/pcrelib/pcre_try_flipped.lo
ext/pcre/pcrelib/pcre_ucp_findchar.lo
ext/pcre/pcrelib/pcre_valid_utf8.lo ext/pcre/pcrelib/pcre_version.lo
ext/pcre/pcrelib/pcre_xclass.lo ext/pcre/php_pcre.lo ext/posix/posix.lo
ext/session/session.lo ext/session/mod_files.lo ext/session/mod_mm.lo
ext/session/mod_user.lo ext/simplexml/simplexml.lo ext/spl/php_spl.lo
ext/spl/spl_functions.lo ext/spl/spl_engine.lo ext/spl/spl_iterators.lo
ext/spl/spl_array.lo ext/spl/spl_directory.lo ext/spl/spl_sxe.lo
ext/sqlite/sqlite.lo ext/sqlite/sess_sqlite.lo
ext/sqlite/libsqlite/src/opcodes.lo ext/sqlite/libsqlite/src/parse.lo
ext/sqlite/libsqlite/src/encode.lo ext/sqlite/libsqlite/src/auth.lo
ext/sqlite/libsqlite/src/btree.lo ext/sqlite/libsqlite/src/build.lo
ext/sqlite/libsqlite/src/delete.lo ext/sqlite/libsqlite/src/expr.lo
ext/sqlite/libsqlite/src/func.lo ext/sqlite/libsqlite/src/hash.lo
ext/sqlite/libsqlite/src/insert.lo ext/sqlite/libsqlite/src/main.lo
ext/sqlite/libsqlite/src/os.lo ext/sqlite/libsqlite/src/pager.lo
ext/sqlite/libsqlite/src/printf.lo ext/sqlite/libsqlite/src/random.lo
ext/sqlite/libsqlite/src/select.lo ext/sqlite/libsqlite/src/table.lo
ext/sqlite/libsqlite/src/tokenize.lo ext/sqlite/libsqlite/src/update.lo
ext/sqlite/libsqlite/src/util.lo ext/sqlite/libsqlite/src/vdbe.lo
ext/sqlite/libsqlite/src/attach.lo ext/sqlite/libsqlite/src/btree_rb.lo
ext/sqlite/libsqlite/src/pragma.lo ext/sqlite/libsqlite/src/vacuum.lo
ext/sqlite/libsqlite/src/copy.lo ext/sqlite/libsqlite/src/vdbeaux.lo
ext/sqlite/libsqlite/src/date.lo ext/sqlite/libsqlite/src/where.lo
ext/sqlite/libsqlite/src/trigger.lo regex/regcomp.lo regex/regexec.lo
regex/regerror.lo regex/regfree.lo ext/standard/array.lo
ext/standard/base64.lo ext/standard/basic_functions.lo
ext/standard/browscap.lo ext/standard/crc32.lo ext/standard/crypt.lo
ext/standard/cyr_convert.lo ext/standard/datetime.lo
ext/standard/dir.lo ext/standard/dl.lo ext/standard/dns.lo
ext/standard/exec.lo ext/standard/file.lo ext/standard/filestat.lo
ext/standard/flock_compat.lo ext/standard/formatted_print.lo
ext/standard/fsock.lo ext/standard/head.lo ext/standard/html.lo
ext/standard/image.lo ext/standard/info.lo ext/standard/iptc.lo
ext/standard/lcg.lo ext/standard/link.lo ext/standard/mail.lo
ext/standard/math.lo ext/standard/md5.lo ext/standard/metaphone.lo
ext/standard/microtime.lo ext/standard/pack.lo ext/standard/pageinfo.lo
ext/standard/parsedate.lo ext/standard/quot_print.lo
ext/standard/rand.lo ext/standard/reg.lo ext/standard/soundex.lo
ext/standard/string.lo ext/standard/scanf.lo ext/standard/syslog.lo
ext/standard/type.lo ext/standard/uniqid.lo ext/standard/url.lo
ext/standard/url_scanner.lo ext/standard/var.lo
ext/standard/versioning.lo ext/standard/assert.lo
ext/standard/strnatcmp.lo ext/standard/levenshtein.lo
ext/standard/incomplete_class.lo ext/standard/url_scanner_ex.lo
ext/standard/ftp_fopen_wrapper.lo ext/standard/http_fopen_wrapper.lo
ext/standard/php_fopen_wrapper.lo ext/standard/credits.lo
ext/standard/css.lo ext/standard/var_unserializer.lo
ext/standard/ftok.lo ext/standard/sha1.lo ext/standard/user_filters.lo
ext/standard/uuencode.lo ext/standard/filters.lo
ext/standard/proc_open.lo ext/standard/sunfuncs.lo
ext/standard/streamsfuncs.lo ext/standard/http.lo
ext/tokenizer/tokenizer.lo ext/xml/xml.lo ext/xml/compat.lo
TSRM/TSRM.lo TSRM/tsrm_strtok_r.lo TSRM/tsrm_virtual_cwd.lo
main/main.lo main/snprintf.lo main/spprintf.lo main/php_sprintf.lo
main/safe_mode.lo main/fopen_wrappers.lo main/alloca.lo
main/php_scandir.lo main/php_ini.lo main/SAPI.lo main/rfc1867.lo
main/php_content_types.lo main/strlcpy.lo main/strlcat.lo
main/mergesort.lo main/reentrancy.lo main/php_variables.lo
main/php_ticks.lo main/network.lo main/php_open_temporary_file.lo
main/php_logos.lo main/output.lo main/streams/streams.lo
main/streams/cast.lo main/streams/memory.lo main/streams/filter.lo
main/streams/plain_wrapper.lo main/streams/userspace.lo
main/streams/transports.lo main/streams/xp_socket.lo
main/streams/mmap.lo Zend/zend_language_parser.lo
Zend/zend_language_scanner.lo Zend/zend_ini_parser.lo
Zend/zend_ini_scanner.lo Zend/zend_alloc.lo Zend/zend_compile.lo
Zend/zend_constants.lo Zend/zend_dynamic_array.lo
Zend/zend_execute_API.lo Zend/zend_highlight.lo Zend/zend_llist.lo
Zend/zend_opcode.lo Zend/zend_operators.lo Zend/zend_ptr_stack.lo
Zend/zend_stack.lo Zend/zend_variables.lo Zend/zend.lo Zend/zend_API.lo
Zend/zend_extensions.lo Zend/zend_hash.lo Zend/zend_list.lo
Zend/zend_indent.lo Zend/zend_builtin_functions.lo Zend/zend_sprintf.lo
Zend/zend_ini.lo Zend/zend_qsort.lo Zend/zend_multibyte.lo
Zend/zend_ts_hash.lo Zend/zend_stream.lo Zend/zend_iterators.lo
Zend/zend_interfaces.lo Zend/zend_exceptions.lo Zend/zend_strtod.lo
Zend/zend_objects.lo Zend/zend_object_handlers.lo
Zend/zend_objects_API.lo Zend/zend_mm.lo Zend/zend_default_classes.lo
Zend/zend_reflection_api.lo Zend/zend_execute.lo
sapi/apache/sapi_apache.lo sapi/apache/mod_php5.lo
sapi/apache/php_apache.lo main/internal_functions.lo
-Wl,--whole-archive /usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.a -Wl,--no-whole-archive -Wl,--rpath
-Wl,/usr/lib/mysql -L/usr/lib/mysql -lcrypt -lcrypt -lresolv -lm -ldl
-lnsl -lz -lm -lz -lm -lz -lcrypt -lnsl -lm -lnss_files -lnss_dns
-lresolv -lnss_files -lnss_dns -lresolv -lz -lm -lcrypt
/usr/lib/libxml2.so -lz -lm -lcrypt -Wl,-soname -Wl,libphp5.so -o
.libs/libphp5.so


I believe the problem is in the following part of the gcc command: 
'-Wl,--whole-archive /usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.a -Wl,--no-whole-archive'

Each time libtool sees -lmysqlclient its finding
/usr/lib/mysql/libmysqlclient.la which has
old_library=libmysqlclient.a, which points to the file
/usr/lib/mysql/libmysqlclient.a.

libtool then assigns it to the variable $convenience, referring to it
as a libtool convenience library:

            convenience="$convenience $dir/$old_library"
            old_convenience="$old_convenience $dir/$old_library"
            deplibs="$dir/$old_library $deplibs"
            link_static=yes

Eventually, a bash trace shows $convenience getting to set to:

+ convenience=' /usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.a'


Also, at the top of libool, you'll see:

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec="\${wl}--whole-archive\$convenience
\${wl}--no-whole-archive"


This is how its getting passed along to gcc as:

'-Wl,--whole-archive /usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.a -Wl,--no-whole-archive'

Does it not make sense that passing this file twice will cause
duplicate symbol errors?  Removing one of them from the command causes
it to build correctly.

Unless we can stop libtool from listing the same file twice as
convenience libraries, I think the simplest solution would be to
prevent listing of -lmysqlclient in EXTRA_LIBS in the Makefile.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/29860

-- 
Edit this bug report at http://bugs.php.net/?id=29860&edit=1

Reply via email to