2

我需要以非 root 用户身份通过​​ CPAN安装 Perl PDL 库。

由于这个 SO 问题,非 root 用户的 CPAN 可以工作:如何将 CPAN 用作非 root 用户?

现在,PDL 依赖于 FFTW 库。显然,当我需要这台机器的 64 位时,我的系统管理员安装了 32 位版本。

我基于 CPAN 安装期间的以下错误消息:

gcc  -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic FFTW.o  -o ../../blib/arch/auto/PDL/FFTW/FFTW.so   \
       -lm -L/lib -L/usr/lib -L/usr/local/lib -L/usr/local/lib64 -L/lib64 -L/usr/lib64 -ldfftw -ldrfftw     \

/usr/bin/ld: skipping incompatible /usr/local/lib/libdfftw.a when searching for -ldfftw
/usr/bin/ld: skipping incompatible /usr/local/lib/libdfftw.a when searching for -ldfftw
/usr/bin/ld: cannot find -ldfftw

现在我已经成功安装了 fftw 了$HOME/lib,确实libdfftw.a

问题是我无法让这个 gcc 编译实例使用本地安装的副本。

我尝试了以下方法:

  1. 在 .bash_profile 中设置 LD_LIBRARY_PATH,是的,导出它——没有骰子。
  2. 以下如何为 Makefile.PL 设置库并包含路径以进行单个安装?,我开始o conf makepl_argcpan--LIBS=-L/homedir/lib INC=-I/homedir/include 仍然没有骰子
  3. 我做了与第 2 步相同的操作,但o conf mbuild_arg--- 再次,没有骰子。

这些尝试都没有对gcc上面的行产生任何影响;没有使用-L标志指定的其他路径。

我还能尝试什么cpan来让这个编译命令引用我的 fftw 副本?

更新 1

在进行任何更改之前,我应该补充的makepl_arg是:

makepl_arg [INSTALLDIRS=site]

因此,我设置makepl_arg为:

makepl_arg [INSTALLDIRS=site LIBS=-L/homedir/lib INC=-I/homedir/include]

我正在设置这些配置而没有o conf commit允许进行实验。我应该进行这些更改吗?

更新 2

我看到上面一行中的那些-L标志gcc来自makefile,它本身似乎是由MakeMaker制作的,我认为它正在读取文件'Makefile.PL'

4

1 回答 1

0

解决方案是检查.cpan/build/PDL-*/目录。

其中 INSTALL 文件指示perldl.conf可以修改该文件以指示 FFTW 库和 FFTW 包含目录的路径。

该过程如下,可以在尝试安装 PDL 失败后完成:

  1. .cpan/build/PDL-*/perldl.conf文件复制到~/.perldl.conf- 注意在.文件名之前添加 - PDL 将在安装时查找此文件,即使在 CPAN 下也是如此
  2. 修改FFTW__LIBSFFTW_INCin~/.perldl.conf以指向适当的位置。
  3. 尝试使用 CPAN 再次安装 PDL。

PDL 不遵守makepl_argcpan 配置有点令人困惑。

于 2013-05-15T16:03:04.290 回答