OSX 10.9 Mavericks上Perl DBI / DBD的问题

时间:2013-10-24 12:09:50

标签: macos perl dbi dbd osx-mavericks

升级到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这样做?

有什么想法吗?

7 个答案:

答案 0 :(得分:10)

我还没有升级到Mavericks,因为Apple不关心在升级操作系统时对Apache,PHP或Perl所做的修改 - 他们只是将它们全部删除。我不知道以下列表是否适合您,但它对Lion和Mountain Lion有用:

  • 在开始之前,必须正确安装和配置MySQL x86 64位。
  • 从App Store安装XCode。
  • 在XCode中,打开首选项/下载菜单,然后安装命令行工具

安装DBI:

  • 使用以下命令安装 cpanm sudo cpan App::cpanminus
  • 安装DBI:sudo cpanm DBI

安装DBD :: mysql:

  • 从CPAN获取必要的文件。打开CPAN终端:sudo perl -MCPAN -e 'shell'
  • 然后,运行以下命令:get DBD::mysqlexit
  • 在编译之前你必须创建一些别名,因为Mac上的MySQL安装方式与Linux不同 - 至少在以前的OS X版本中是这样:
  

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找到它。

希望这适合你。


修改

这是我通过几次失败尝试所做的汇编,但我想我应该说出我的来源:

http://bixsolutions.net/forum/thread-8.html

http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in

答案 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上也遇到过这个问题。对我有用的解决方案是我在网上看到的一些东西的混合物:

  1. 安装最新版本的命令行工具(apple web developers site):
    $sudo perl -MCPAN -e shell

  2. 使用cpan重新安装DBI和DBD:mysql模块。我在这里遇到了一个问题,即胖子崩溃了。

  3. 使用最新版本的CommandLineTools lipo:
    $sudo mv /usr/bin/lipo /usr/bin/lipo.orig
    $sudo ln -s /Library/Developer/CommandLineTools/usr/bin/lipo /usr/bin

  4. 最后使用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