升级到OSX Mavericks后,我无法运行DBI / DBD。
Perl和MySQL运行正常(我可以登录到mysql并访问我的表),但我的Perl脚本不再使用DBI,因为更新程序删除了我以前工作的所有Perl模块。
我使用CPAN重新安装了DBI和DBD :: mysql,它们将它们安装到/opt/local/lib/perl5/site_perl/5.12.4/darwin-multi-2level/。将模块(DBI,DBD和“auto”中的所有内容)复制到/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这样做?
有什么想法吗?
答案 0 :(得分:10)
我还没有升级到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
找到它。
希望这适合你。
修改强>
这是我通过几次失败尝试所做的汇编,但我想我应该说出我的来源:
答案 1 :(得分:2)
5.12和5.16的信息是现货。要修复,请升级CPAN并重新安装模块:
sudo cpan
install CPAN
reload cpan
install <module>
答案 2 :(得分:0)
当我使用自定义端口(我使用Boxen)升级到OS X 10.9时,我有一个现有的MySQL配置。到目前为止,对我而言最简单的路线是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
答案 3 :(得分:0)
我在Mavericks OS上也遇到过这个问题。对我有用的解决方案是我在网上看到的一些东西的混合物:
安装最新版本的命令行工具(apple web developers site):
$sudo perl -MCPAN -e shell
使用cpan重新安装DBI和DBD:mysql模块。我在这里遇到了一个问题,即胖子崩溃了。
使用最新版本的CommandLineTools lipo:
$sudo mv /usr/bin/lipo /usr/bin/lipo.orig
$sudo ln -s /Library/Developer/CommandLineTools/usr/bin/lipo /usr/bin
最后使用cpan install DBI重新安装DBI,DBD:mysql模块,cpan install DBD :: mysql
答案 4 :(得分:0)
Mavericks安装Perl 5.16,但它不会删除以前的5.12二进制文件。另外我安装了一些其他软件,它在/opt/local/bin
下保留了Perl 5.12的更多副本(我认为它是MacPorts,我可能用它来安装cpan),这个目录在我的bash配置文件中列出。
这意味着CPAN使用5.12来编译二进制文件,而Apache使用5.16,这就是为什么在Web脚本崩溃时终端中有些东西可以工作的原因。
从/opt/local/bin
删除$PATH
并手动重新安装DBI和DBD最终解决了问题。
答案 5 :(得分:0)
对我来说,我最终完全卸载了MySql并安装了一个较旧的32位版本,如此stackoverflow页面中所述: MySQL pid ended (cannot start mysql)
然后你需要让Perl在32位模式下运行,只需在终端输入以下内容(在AskDifferent归功于Simon):
defaults write com.apple.versioner.perl Prefer-32-Bit -bool yes
答案 6 :(得分:0)
在High Sierra下的几个月中,我遇到问题,试图让DBI :: mysql无法正常工作。我在此链接上找到了解决方案:
Trouble installing DBD::mysql under macOS Mojave
对我有用的是: 1. brew安装openssl mysql-connector-c 2. sudo cpan安装DBD :: mysql