Link to home
Start Free TrialLog in
Avatar of StephenMcGowan
StephenMcGowan

asked on

Problems installing DBD::MySQL (CPAN)

Hi,

I'm currently having issues trying to install the DBD driver for MySQL to use with DBI.
I currently have DBI 1.609 installed.

When i go to install the DBD::MySQL it seems two directories can not be located... cflags and libs. I think i need to locate these files and then tell the script where they are (if they are there at all!).

I'll link my code below:

Thanks.
cpan> install DBD::mysql
CPAN: Storable loaded ok
Going to read /Users/stevey_mac2k2/.cpan/Metadata
  Database was generated on Sun, 05 Jul 2009 21:26:57 GMT
Running install for module DBD::mysql
Running make for C/CA/CAPTTOFU/DBD-mysql-4.012.tar.gz
CPAN: Digest::MD5 loaded ok
CPAN: Compress::Zlib loaded ok
Checksum for /Users/stevey_mac2k2/.cpan/sources/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.012.tar.gz ok
Scanning cache /Users/stevey_mac2k2/.cpan/build for sizes
DBD-mysql-4.012/
DBD-mysql-4.012/ChangeLog
DBD-mysql-4.012/constants.h
DBD-mysql-4.012/dbdimp.c
DBD-mysql-4.012/dbdimp.h
DBD-mysql-4.012/eg/
DBD-mysql-4.012/eg/._bug14979.pl
DBD-mysql-4.012/eg/bug14979.pl
DBD-mysql-4.012/eg/._bug21028.pl
DBD-mysql-4.012/eg/bug21028.pl
DBD-mysql-4.012/eg/bug30033.pl
DBD-mysql-4.012/eg/bug30033pg.pl
DBD-mysql-4.012/eg/decimal_test.pl
DBD-mysql-4.012/eg/issue21946.pl
DBD-mysql-4.012/eg/prepare_memory_usage.pl
DBD-mysql-4.012/eg/proc_example1.pl
DBD-mysql-4.012/eg/proc_example2.pl
DBD-mysql-4.012/eg/proc_example2a.pl
DBD-mysql-4.012/eg/proc_example2b.pl
DBD-mysql-4.012/eg/proc_example3.pl
DBD-mysql-4.012/eg/proc_example4.pl
DBD-mysql-4.012/INSTALL.html
DBD-mysql-4.012/lib/
DBD-mysql-4.012/lib/Bundle/
DBD-mysql-4.012/lib/Bundle/DBD/
DBD-mysql-4.012/lib/Bundle/DBD/mysql.pm
DBD-mysql-4.012/lib/DBD/
DBD-mysql-4.012/lib/DBD/mysql/
DBD-mysql-4.012/lib/DBD/mysql/GetInfo.pm
DBD-mysql-4.012/lib/DBD/mysql/INSTALL.pod
DBD-mysql-4.012/lib/DBD/mysql.pm
DBD-mysql-4.012/Makefile.PL
DBD-mysql-4.012/Makefile.PL.embedded
DBD-mysql-4.012/MANIFEST
DBD-mysql-4.012/MANIFEST.SKIP
DBD-mysql-4.012/META.yml
DBD-mysql-4.012/myld
DBD-mysql-4.012/mysql.xs
DBD-mysql-4.012/README
DBD-mysql-4.012/t/
DBD-mysql-4.012/t/00base.t
DBD-mysql-4.012/t/10connect.t
DBD-mysql-4.012/t/20createdrop.t
DBD-mysql-4.012/t/25lockunlock.t
DBD-mysql-4.012/t/29warnings.t
DBD-mysql-4.012/t/30insertfetch.t
DBD-mysql-4.012/t/31insertid.t
DBD-mysql-4.012/t/32insert_error.t
DBD-mysql-4.012/t/35limit.t
DBD-mysql-4.012/t/35prepare.t
DBD-mysql-4.012/t/40bindparam.t
DBD-mysql-4.012/t/40bindparam2.t
DBD-mysql-4.012/t/40blobs.t
DBD-mysql-4.012/t/40catalog.t
DBD-mysql-4.012/t/40keyinfo.t
DBD-mysql-4.012/t/40listfields.t
DBD-mysql-4.012/t/40nulls.t
DBD-mysql-4.012/t/40numrows.t
DBD-mysql-4.012/t/40server_prepare.t
DBD-mysql-4.012/t/40server_prepare_error.t
DBD-mysql-4.012/t/40types.t
DBD-mysql-4.012/t/41bindparam.t
DBD-mysql-4.012/t/41blobs_prepare.t
DBD-mysql-4.012/t/42bindparam.t
DBD-mysql-4.012/t/50chopblanks.t
DBD-mysql-4.012/t/50commit.t
DBD-mysql-4.012/t/51bind_type_guessing.t
DBD-mysql-4.012/t/55utf8.t
DBD-mysql-4.012/t/60leaks.t
DBD-mysql-4.012/t/65types.t
DBD-mysql-4.012/t/70takeimp.t
DBD-mysql-4.012/t/71impdata.t
DBD-mysql-4.012/t/75supported_sql.t
DBD-mysql-4.012/t/76multi_statement.t
DBD-mysql-4.012/t/80procs.t
DBD-mysql-4.012/t/lib.pl
DBD-mysql-4.012/t/mysql.dbtest
DBD-mysql-4.012/t/mysql.mtest
DBD-mysql-4.012/TODO
Removing previously used /Users/stevey_mac2k2/.cpan/build/DBD-mysql-4.012
 
  CPAN.pm: Going to build C/CA/CAPTTOFU/DBD-mysql-4.012.tar.gz
 
 
 
PLEASE NOTE:
 
For 'make test' to run properly, you must ensure that the 
database user 'root' can connect to your MySQL server 
and has the proper privileges that these tests require such 
as 'drop table', 'create table', 'drop procedure', 'create procedure'
as well as others. 
 
mysql> grant all privileges on test.* to 'root'@'localhost' identified by 's3kr1t';
 
You can also optionally set the user to run 'make test' with:
 
perl Makefile.pl --testuser=username
 
I will use the following settings for compiling and testing:
 
  cflags        (mysql_config) = -I/usr/local/mysql/include  -g -Os -arch i386 -fno-common   -D_P10
+03_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DE
+CLARE_CXA_PURE_VIRTUAL
  embedded      (mysql_config) = 
  libs          (mysql_config) = -L/usr/local/mysql/lib -lmysqlclient -lz -lm     -lmygcc
  mysql_config  (guessed     ) = mysql_config
  nocatchstderr (default     ) = 0
  nofoundrows   (default     ) = 0
  ssl           (guessed     ) = 0
  testdb        (default     ) = test
  testhost      (default     ) = 
  testpassword  (default     ) = 
  testsocket    (default     ) = 
  testuser      (guessed     ) = root
 
To change these settings, see 'perl Makefile.PL --help' and
'perldoc INSTALL'.
 
Checking if your kit is complete...
Looks good
Using DBI 1.609 (for perl 5.008008 on darwin-thread-multi-2level) installed in /Library/Perl/5.8.8/
+darwin-thread-multi-2level/auto/DBI/
Writing Makefile for DBD::mysql
    -- NOT OK
Running make test
  Can't test without successful make
Running make install
  make had returned bad status, install seems impossible

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of kawas
kawas
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of StephenMcGowan
StephenMcGowan

ASKER

Ok thanks guys, i think i'm on top of this now.

Yeah it seems to me the error is in the directories for cflags and libs.

(shown top of code box)

Having read the help... it says for these two:

Possible options are:

  --cflags=<flags>       Use <flags> for running the C compiler; defaults
                         to the value of "mysql_config --cflags" or a guessed
                         value
  --libs=<libs>          Use <libs> for running the linker; defaults
                         to the value of "mysql_config --libs" or a gussed
                         value

So i'm guessing i need to change the defaults to the value "mysql_config --cflags" and "mysql_config --libs".

Would this be right? and if so how would i go about this?

Thanks again
 cflags        (mysql_config) = -I/usr/local/mysql/include  -g -Os -arch i386 -fno-common   -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL
  embedded      (mysql_config) = 
  libs          (mysql_config) = -L/usr/local/mysql/lib -lmysqlclient -lz -lm     -lmygcc
  mysql_config  (guessed     ) = mysql_config
  nocatchstderr (default     ) = 0
  nofoundrows   (default     ) = 0
  ssl           (guessed     ) = 0
  testdb        (default     ) = test
  testhost      (default     ) = 
  testpassword  (default     ) = 
  testsocket    (default     ) = 
  testuser      (guessed     ) = root

Open in new window

I'm currently working through this guide.. which seems to be well documented on this error:

http://jayallen.org/journey/2006/04/dbd-mysql-build-problems-on-mac-book-pro

The guide states:

"Clearly the build script couldn't find the MySQL libraries. Looking more carefully at the output from the first command, I noticed the following two lines:

cflags   (mysql_config) = -I/usr/local/mysql/include/mysql -Os -arch i386 -fno-common
libs     (mysql_config) = -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm
I checked to see if those two directories existed and  surprise, surprise!  they did not. I ran the mysql_config command manually to check whether it was also reporting false values:

# mysql_config --cflags
-I/usr/local/mysql/include/mysql -Os -arch i386 -fno-common

# mysql_config --libs
-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm
Indeed it was. However, I noticed that if I stripped off mysql from the end of the path gave me the correct directories contained all of MySQL's header and include files. Hooray.

The Solution

So, the solution to the problem is simply to specify the cflags and libs options in the Makefile creation step with the correct directories. For me, this was the final command:

sudo perl Makefile.PL \
 --cflags="-I/usr/local/mysql/include -Os -arch i386 -fno-common" \
 --libs="-L/usr/local/mysql/lib -lmysqlclient -lz -lm"

This is probably the case for you as well, but to make sure, simply check that both of the directories above exist. After this, you should be able to successfully perform the sudo make and sudo make install commands and be up and running."

The problem i seem to be having is actually locating cflags and libs in the mysql_config to able to begin on this.

Stephen
I think i've spotted something on this:

My mysql_config command pulls up:

Usage: /usr/local/mysql-5.1.36-osx10.5-x86/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/local/mysql-5.1.36-osx10.5-x86/include  -g -Os -arch i386 -fno-common   -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL]
        --include        [-I/usr/local/mysql-5.1.36-osx10.5-x86/include]
        --libs           [-L/usr/local/mysql-5.1.36-osx10.5-x86/lib -lmysqlclient -lz -lm     -lmygcc]
        --libs_r         [-L/usr/local/mysql-5.1.36-osx10.5-x86/lib -lmysqlclient_r -lz -lm     -lmygcc]
        --plugindir      [/usr/local/mysql/lib/plugin]
        --socket         [/tmp/mysql.sock]
        --port           [0]
        --version        [5.1.36]
        --libmysqld-libs [-L/usr/local/mysql-5.1.36-osx10.5-x86/lib -lmysqld -ldl  -lz -lm       -lmygcc]

you'll see ----cflags in mysql_config is linked to------
 -I/usr/local/mysql-5.1.36-osx10.5-x86/include
and -----libs is linked to------
 -L/usr/local/mysql-5.1.36-osx10.5-x86/lib -lmysqlclient_r

so DBD::mysql is looking for:

  cflags        (mysql_config) = -I/usr/local/mysql/include  -g -Os -arch i386 -fno-common   -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL
  embedded      (mysql_config) =
  libs          (mysql_config) = -L/usr/local/mysql/lib -lmysqlclient -lz -lm     -lmygcc
  mysql_config  (guessed     ) = mysql_config
  nocatchstderr (default     ) = 0
  nofoundrows   (default     ) = 0
  ssl           (guessed     ) = 0
  testdb        (default     ) = test
  testhost      (default     ) =
  testpassword  (default     ) =
  testsocket    (default     ) =
  testuser      (guessed     ) = root

which are completely different directories... so i need to change the mysql_config?

Stephen