SnowLeopard编译Perl DBD-Mysql出现 Can’t find ‘boot_DBD__mysql’ symbol
由于重新升级了macports,Perl更新l到5.10.1,原先的CPAN库要重装。不使用系统的Perl是因为避免今后OSX更新导致的问题。在DBD-Mysql make test时出现:
# Failed test ‘use DBD::mysql;’
# at t/00base.t line 21.
# Tried to use ‘DBD::mysql’.
# Error: Can’t find ‘boot_DBD__mysql’ symbol in /Volumes/users/night/.cpan/build/DBD-mysql-4.012-jPYwzP/blib/arch/auto/DBD/mysql/mysql.bundle
很奇怪,似乎link的lib不对。perl -V仔细检查了一下,发现还是64bit的问题。Snow Leopard中默认都编译为64bit,因此
perllib编译为x86_64,而mysql我安装的时候选择了i386版本,这样导致bundle无法正确加载了。
解决: 重新下载并安装x86_64版本的mysql for osx。 这下测试全部通过。
提示:
像我上篇所言,Snow Leopard默认都是64bit的代码,因此如果下载预编译的第三方库,一定要下载x86_64版本,
否则无法link。
2个小问题
1. 重新编译PHP,不使用mysqlnd,使用传统的mysql库,无法链接数据库, 错误:
Lost connection to MySQL server at ‘reading authorization packet’
原因: Mysql server默认链接超时是5秒 , 超过了则会报上述错误. 修改/etc/my.cnf将connect_timeout设置为60(和php
mysqli的值一样)
UPDATE: 不要修改,修改后产生了太多的链接!
MysqlND没有这个问题,从侧面说明,其连接池做的还不错.
2.编译DBD::mysql测试无法通过, 报错误无法载入mysqlclient.15.dylib
原因:
默认编译是动态编译,而其引用的mysql动态库的地址是错误的,默认是(/usr/local/mysql/lib/mysql)
在我的osx上,应该是/usr/local/mysql/lib
解决方案1: cp *dylib /usr/local/mysql/lib/mysql/
解决方案2:使用static link:
perl Makefile.PL –libs=”-L/usr/local/mysql/lib/mysql -lmysqlclient” –testuser=root
make
make test
sudo make install