http://www.perlmonks.org?node_id=845657


in reply to Re: dyld: lazy symbol binding failed (was MAC OS 10.6 upgrade breaks DBD:mysql)
in thread dyld: lazy symbol binding failed (was MAC OS 10.6 upgrade breaks DBD:mysql)

Gramps! If you were in the U.S. right now, I'd wish you a happy Father's Day, since that is applicable at the moment here. (But I gather Australia's on the other side of the Date-line, and maybe doesn't even have this concept of one day for making fathers feel like they can get special attention.)

Anyway, I have run into the exact problem described in one of the posts above: macosx 10.6 (snow leopard, replacing a previous 10.5 on my macbook), Perl 5.10.0 (x86_64, as per the macosx distro), newly installed mysql 5.1.48 64-bit (replacing a 5.0.1 32-bit version that had been working fine with osx 10.5): DBI/DBD::mysql newly installed (the latter by hand, to get the tests to pass), and now a simple one-liner like this:

perl -MDBI -le '$d=DBI->connect("DBI:mysql:database=test;host=localhos +t","test",""); print "ok"'
Works fine when run as root, but fails (with the thread-topic error message) when run as me.

Your explanation sounded like something I might be able get my head around, but alas, I don't know what you're talking about. Where/how do I control or learn about this "word width" issue?

Actually, it turns out this anonymonk reply above had the right answer: a typical root shell in this sort of setup does not have "VERSIONER_PERL_PREFER_32_BIT=yes" when perl runs, whereas my own personal login account does. Of course, I don't have anything like this showing up in my normal shell environment -- it only shows up when I run perl, and if I change $ENV{VERSIONER_PERL_PREFER_32_BIT} to "no" inside a perl script, it's already too late to take effect (DBD::mysql still fails).

Luckily, if I this to my .bashrc file, perl pays attention, and DBD::mysql works (finally!!!)

export VERSIONER_PERL_PREFER_32_BIT=no
So, to recap my voyage through this morass...
1. upgraded from macosx 10.5 to 10.6, causing upgrade from perl 5.8.8 +to 5.10.0, and therefore... 2. had to "mysqldump --database each_db_needed | gzip > each_db_needed +.dump.gz (update) 2b. Shut down running mysqld 3. had to install mysql 5.1.48 64-bit (macosc binary distro) 4. change "/usr/local/mysql" symlink target from mysql-5.0.1 to mysql- +5.1.48 (update) 4b. Start mysqld 5. gunzip < each_db_needed.dump.gz | mysql 6. set up mysql accounts and passwords 7. install DBI (standard cpan style) 8. install DBD::mysql (by hand -- for some reason, 'testuser' needed t +weaking) 9. add 'export VERSIONER_PERL_PREFER_32_BIT=no' to my .bashrc 10. hope that step 9 doesn't break lots of other stuff...
This thread has proven to me once again how valuable perlmonks is. I'm moved to donate more money.

Replies are listed 'Best First'.
Re^3: dyld: lazy symbol binding failed (was MAC OS 10.6 upgrade breaks DBD:mysql)
by elim (Initiate) on Aug 06, 2012 at 19:00 UTC
    This old problem is new to me since I just installed os x 10.6 and upgraded to 10.6.8. My system c2d hence 64 bit, the perl is 5.10.0 from apple, 64bit too, and I installed mysql 5.1.63 for mac 10.6 64bit from a downloaded dmg. But these didn't save me from errors:
    dyld: lazy symbol binding failed: Symbol not found: _mysql_init Referenced from: /Library/Perl/5.10.0/darwin-thread-multi-2level/aut +o/DBD/mysql/mysql.bundle Expected in: flat namespace dyld: Symbol not found: _mysql_init Referenced from: /Library/Perl/5.10.0/darwin-thread-multi-2level/aut +o/DBD/mysql/mysql.bundle Expected in: flat namespace ========================
    So what's the easiest fix? Thanks a lot
      Did you do "step 9" (add export VERSIONER_PERL_PREFER_32_BIT=no to your .bashrc)?
      Did you manage to solve this? I'm having the same issue. Thanks.
        6 years ago elim was here... Are you exporting versioner as explained?