You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Martin Redington <m....@ucl.ac.uk> on 2001/06/01 02:13:01 UTC

dyld problems with Apache 1.3.19 and mod_perl/mod_php on Mac OS X 10.0.03

I'm having some some difficulties with Apache 1.3.19 and 
mod_perl/mod_php. Everything builds fine, but I get dyld multiple 
definition errors in some circumstances. I believe this is connected to 
the OX X dyld's insistence on freaking out with multiple definitions (so 
non Mac OS X users might like to stop here) but I'm not sure what the 
fix is. I've spent quite a long time on this, and am getting quite 
desperate. Any pointers would be very helpful.

I'm used to using persistent database connections under mod_perl and 
Apache, via the Apache::DBI modules, and Tim Bunce's excellent DBD 
modules, on Linux.

I also like to build everything myself. So, I downloaded and installed 
Perl 5.6.1, Apache 1.3.19, mod_perl 1.25, mysql 3.23.36, the 
Msql-Mysql-modules 1.2216, DBI 1.15, Apache::DBI 0.88 and php 4.05.

After some fiddling, and with some help from Mac OS X Hints and Stepwise 
(Thanks especially to the macosx-perl mailing list, Scott Anguish at 
Stepwise, and Merlin Tishauser <gw...@mac.com>), I got everything to 
build. I also got persistent database connections to a mysql database.

When I added mod_php to the build, via apxs, my apache build started 
dying on startup, with the following error message:

dyld: /usr/local/apache1.3.19/bin/httpd multiple definitions of symbol 
__dig_vec
/usr/local/apache1.3.19/libexec/libphp4.so definition of __dig_vec
/Library/Perl/site_perl/5.6.1/darwin/auto/DBD/mysql/mysql.bundle 
definition of __dig_vec
/usr/local/apache/bin/apachectl start: httpd could not be started

I tracked the error down to a startup script that I run via a 
PerlRequire directive (see the mod_perl docs), to open an initial 
database handle, and load various perl Modules. Commenting out the 
PerlRequire stopped the error, but when I requested my test_database.pl 
script (which runs a simple select on the database), from a mod_perl 
directory, the browser hung, and similar dyld errors appeared in the 
error log. Strangely, a copy of the script that I keep in in a non 
mod_perl cgi-bin directory runs with no problem. Within the script, the 
errors originate with the line "use DBD::MySQL", or at an open 
connection statement, which is effectively the same thing.

I think what is happening is that the __dig_vec symbol being loaded from 
the DBD::MySQL bundle is conflicting with the same symbol in mod_php. I 
looked in the Apache 1.3.19 source, and can see handlers for multiple 
definition in os/unix/os.c, but I guess that the DBD::MySQL module is 
being loaded by code in perl or mod_perl.

I guess my question is, is there an easy way to fix this conflict, or do 
perl and/or mod_perl need to be patched with similar dyld error handlers 
to the ones in Apache (see os/unix/os.c)?

My config info is as follows:

Perl:

     config_args='-ds -Dmksymlinks -Adefine:prefix=/usr/local 
-Dccflags=-g -pipe -Dfirstmakefile=GNUmakefile 
-Adefine:privlib=/Library/Perl/5.6.1 
-Adefine:sitelib=/Library/Perl/site_perl/5.6.1 
-Adefine:vendorlib=/Network/Library/Perl/5.6.1 
-Dman1dir=/usr/local/man/man1 -Dman3dir=/usr/local/man/man3 
-Uinstallusrbinperl'

Apache:

./configure \
"--prefix=/usr/local/apache1.3.19" \
"--with-layout=Apache" \
"--enable-module=all" \
"--enable-shared=max" \

mod_perl: built via apxs, with EVERYTHING=1

PHP (patched as advised by Merlin Tishauser):

./configure \
   --with-xml \
   --with-zlib \
   --with-apxs=/usr/local/apache/bin/apxs \
   --with-mysql=/usr/local/mysql \
   --disable-pear \
   --enable-track-vars \

==========================================================================
===