Bug #4670 | Perl DBD::mysql compilation reports libmysqlclient.a error | ||
---|---|---|---|
Submitted: | 21 Jul 2004 14:13 | Modified: | 14 Sep 2004 18:26 |
Reporter: | Mike Blazer | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S2 (Serious) |
Version: | 4.0.20 | OS: | Linux (Gentoo Linux) |
Assigned to: | Bugs System | CPU Architecture: | Any |
[21 Jul 2004 14:13]
Mike Blazer
[26 Jul 2004 23:36]
Mike Blazer
Hello, it's Mike, who started this bug report. Well, that's not any programming bug - I easilly compiled libmysqlclient.a with -fPIC option. It's just that both distributions are sort of broken. So, you can mark it lower then High/Serious Mike
[17 Aug 2004 22:03]
Patrick Galbraith
I need to test this on a 64-bit box, and am wondering if perhaps 'perl Makefile.pl' was unable to use the values from 'mysql_config' to generate proper compile flags in the Makefile.
[2 Sep 2004 3:05]
Patrick Galbraith
I could get DBD::mysql to compile on my AMD test platform, but make test fails. Now, this is with the latest code, which I've modified Makefile.PL to correctly find mysql_config which will give the correct compile options. The problem I have is in 'make test', and it seems that there is a problem loading modules. Also, I'm testing as a regular user. I would really like to test as root to rule out any issues with whether the user I'm using is the problem. This is my output: mysqldev@melody:~/test/dbd-mysql> make cc -c -I/usr/lib/perl5/site_perl/5.8.0/x86_64-linux-thread-multi/auto/DBI -I/home/mysqldev/test/mysql/include -g -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 --pipe -DVERSION=\"2.9003\" -DXS_VERSION=\"2.9003\" -fPIC "-I/usr/lib/perl5/5.8.0/x86_64-linux-thread-multi/CORE" dbdimp.c cc -c -I/usr/lib/perl5/site_perl/5.8.0/x86_64-linux-thread-multi/auto/DBI -I/home/mysqldev/test/mysql/include -g -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 --pipe -DVERSION=\"2.9003\" -DXS_VERSION=\"2.9003\" -fPIC "-I/usr/lib/perl5/5.8.0/x86_64-linux-thread-multi/CORE" mysql.c Running Mkbootstrap for DBD::mysql () chmod 644 mysql.bs rm -f blib/arch/auto/DBD/mysql/mysql.so LD_RUN_PATH="" /usr/bin/perl myld cc -shared -L/usr/local/lib64 dbdimp.o mysql.o -o blib/arch/auto/DBD/mysql/mysql.so RETVAL 0 chmod 755 blib/arch/auto/DBD/mysql/mysql.so cp mysql.bs blib/arch/auto/DBD/mysql/mysql.bs chmod 644 blib/arch/auto/DBD/mysql/mysql.bs Manifying blib/man3/DBD::mysql.3pm Manifying blib/man3/Mysql.3pm Manifying blib/man3/DBD::mysql::INSTALL.3pm Manifying blib/man3/Bundle::DBD::mysql.3pm mysqldev@melody:~/test/dbd-mysql> PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/00base.t t/00base....install_driver(mysql) failed: Can't load '/home/mysqldev/test/dbd-mysql/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: /home/mysqldev/test/dbd-mysql/blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: net_buffer_length at /usr/lib/perl5/5.8.0/x86_64-linux-thread-multi/DynaLoader.pm line 229. at (eval 1) line 3 Compilation failed in require at (eval 1) line 3. Perhaps a required shared library or dll isn't installed where expected at t/00base.t line 38 t/00base....dubious Test returned status 255 (wstat 65280, 0xff00) DIED. FAILED tests 4-5 Failed 2/5 tests, 60.00% okay Failed Test Stat Wstat Total Fail Failed List of Failed ------------------------------------------------------------------------------- t/00base.t 255 65280 5 2 40.00% 4-5 Failed 1/1 test scripts, 0.00% okay. 2/5 subtests failed, 60.00% okay. mysqldev@melody:~/test/dbd-mysql>
[3 Sep 2004 22:58]
Patrick Galbraith
I have tested this and now verified that this problem does indeed exist with both 4.0.21 and 4.1.4. The only fix I found was to compile DBD::mysql against libmysql dynamic libs. I have even tried compiling MySQL with -fPIC and still the problem exists. The solution therefore, is to compile DBD::mysql against libmysql dynamically: (this is how I did it) perl Makefile.PL --libs="-L/home/mysqldev/test/mysql/lib -lmysqlclient" --cflags="-I/home/mysqldev/test/mysql/include" --testuser=root This resulted in both a successful compile as well as a successful 'make test' Note: You shouldn't have to specify libs or cflags if you are installing this as root.