使用Ubuntu,如何从CPAN安装DBD :: Sybase?

时间:2013-07-23 18:53:22

标签: sql-server perl sybase freetds dbd

每当我尝试构建DBD::Sybase以连接到MSSQL时,我都会收到错误,

$ sudo cpanp install DBD::Sybase


Installing DBD::Sybase (1.15)
Running [/usr/bin/perl /usr/bin/cpanp-run-perl /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL INSTALLDIRS=site]...
Can't find any Sybase libraries in /etc/lib or /etc/lib64 at /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL line 155, <IN> line 44.
BEGIN failed--compilation aborted at /usr/bin/cpanp-run-perl line 11, <IN> line 44.
[ERROR] Could not run '/usr/bin/perl Makefile.PL': Can't find any Sybase libraries in /etc/lib or /etc/lib64 at /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL line 155, <IN> line 44.
BEGIN failed--compilation aborted at /usr/bin/cpanp-run-perl line 11, <IN> line 44.
 -- cannot continue

[ERROR] Unable to create a new distribution object for 'DBD::Sybase' -- cannot continue

*** Install log written to:
  /home/ecarroll/.cpanplus/install-logs/DBD-Sybase-1.15-1374605483.log

Error installing 'DBD::Sybase'
Problem installing one or more modules

我在其他Debian系统上也遇到了这个错误。

3 个答案:

答案 0 :(得分:10)

有两种方法可以做到这一点,

  • (a)发行版提供的freetds
  • 或者,(b)在上游安装香草freetds并对其进行建设。

第二个选项(b)总是可行的,但是你的系统可能有两个不同版本的freetds。

The first option can not be done without some hacking and the author will not fix it.他只是头脑冷静,想要修复内部结构以匹配他使用的操作系统,而不是让它接受其他配置。

内部DBD::Sybase期望有一个目录和$libdir(包含liblib64的子目录)。 Debian软件包DBD::Sybase提供的目录freetds-dev需要正确构建; Debian软件包安装到/usr/include,它没有liblib64子目录。您可以通过欺骗make并重新创建该结构来解决这个问题,首先确保您已安装freetds-dev

sudo apt-get install freetds-dev

然后链接它以创建伪包。在我的64位机器上,它看起来像这样。

mkdir /tmp/freetds
ln -s /usr/lib/x86_64-linux-gnu/ /tmp/freetds/lib64
ln -s /usr/include /tmp/freetds/include/freetds

现在,它应该可以工作,您可以针对系统库构建DBD::Sybase

sudo SYBASE=/tmp/freetds cpanp install DBD::Sybase

中提琴。

答案 1 :(得分:4)

要为系统perl安装模块,您可以从Ubuntu存储库安装软件包。虽然这些可能已过时,但库依赖关系是经常解决的。在这种情况下,一个

$ sudo apt-get install libdbd-sybase-perl

应该这样做。

答案 2 :(得分:2)

我相信您必须创建include子目录,否则第二个ln将失败:

mkdir /tmp/freetds/include