升级到OSX Mavericks后,我无法运行DBI / DBD。
Perl和MySQL运行正常(我可以登录mysql并访问我的表),但是由于更新程序删除了我以前所有可用的Perl模块,因此我的Perl脚本不再使用DBI。
我使用CPAN重新安装了DBI和DBD :: mysql,将它们安装到/opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level/。将模块(DBI,DBD和“自动”中的所有内容)复制到/Library/Perl/5.16/darwin-multi-2level/(由于cpan使用的目录不在@INC中)后,我的脚本返回内部服务器错误(即使使用FatalsToBrowser也可以)。
Apache错误日志说:
dyld: lazy symbol binding failed: Symbol not found: _Perl_Istack_sp_ptr
Referenced from: /opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level/auto/DBI/DBI.bundle
Expected in: flat namespace
dyld: Symbol not found: _Perl_Istack_sp_ptr
Referenced from: /opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level/auto/DBI/DBI.bundle
Expected in: flat namespace
Premature end of script headers: test.pl
这里有什么问题?也许是因为我复制了文件?也许我应该强制CPAN直接安装到/Library/Perl/5.16/?如何告诉CPAN这样做?
有什么想法吗?
我还没有升级到Mavericks,因为Apple不在乎升级操作系统时对Apache,PHP或Perl所做的修改-他们只是将它们全部删除了。我不知道以下列表对您来说是否很好,但是对Lion和Mountain Lion来说对我有用:
安装DBI:
sudo cpan App::cpanminus
。sudo cpanm DBI
。安装DBD :: mysql:
sudo perl -MCPAN -e 'shell'
。get DBD::mysql
和exit
。cd / usr / local
sudo mkdir lib
cd lib
sudo ln -s /usr/local/mysql/lib/*.dylib。
cd〜/ .cpan / build / DBD * /
sudo perl Makefile.PL --testuser ='yourmysqluser'--testpassword ='yourmysqlpassword'
sudo make
sudo make test
sudo make install
在cd ~/.cpan/build/DBD*/
处,按*
,我的意思是您应该写出实际路径,该路径将指向您刚从CPAN下载的文件。目录的名称根据最新版本而变化,但是通过简单的ls
即可轻松找到它。
希望这对您有用。
编辑
这是我经过几次失败的尝试而编写的,但是我认为我应该给自己的出处命名:
带有5.12和5.16的信息已显示。要修复,请升级CPAN并重新安装模块:
升级到OS X 10.9时,我具有一个现有的MySQL配置,带有一个自定义端口(我使用Boxen)。到目前为止,对我来说,最简单的方法是source installation。
# extract the archive, etc.
perl Makefile.PL --testuser=myuser --testpassword=pass --testport=13306
make
make test
# if all went well with the test
make install
我在Mavericks操作系统上也遇到了这个问题。对我有用的解决方案是我在网上看到的一些东西的混合体:
Mavericks将安装Perl 5.16,但不会删除以前的5.12二进制文件。另外,我还安装了一些其他软件,该软件在/opt/local/bin
下保留了Perl 5.12的另一个副本(我认为是MacPorts,我可能用它来安装cpan),并且该目录在我的bash配置文件中列出。
对我来说,我最终完全卸载了MySql并安装了一个旧的32位版本,如下面的stackoverflow页所述:MySQL pid ended (cannot start mysql)
我在High Sierra下遇到了几个月的问题,试图让DBI :: mysql无法正常工作。我在此链接找到了解决方案: