【问题标题】:How can I tell a CPAN installation of PDL to use my FFTW path?如何告诉 PDL 的 CPAN 安装使用我的 FFTW 路径?
【发布时间】:2013-05-14 00:42:47
【问题描述】:

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

由于这个 SO 问题,用于非 root 的 CPAN 工作:How can I use CPAN as a non-root user?

现在,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

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

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

我尝试了以下方法:

  1. 在 .bash_profile 中设置 LD_LIBRARY_PATH,是的,导出它 -- 没有骰子。
  2. How can I set library and include paths for Makefile.PL for a single installation? 之后,我将cpan 中的o conf makepl_arg 设置为: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

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

【问题讨论】:

  • 请仔细检查您在第 2 步中所做的操作。当你看到o conf makepl_arg时你看到LIBS=-L/homedir/lib INC=-I/homedir/include吗?
  • (第 3 步为 mbuild_arg 使用了不正确的值,但 PDL 使用了 makepl_arg,所以不是问题。)
  • 刚刚ikegami又试了一次,可惜问题依旧。
  • 注意:PDL 不依赖于 FFTW 库,它是可选的。如果您需要 FFTW 支持,显然您需要它。否则,还有一些 PDL 的其他 FFT 组件。
  • 好的,很好。至于o conf commit,在做install PDL之前不退出是没有必要的。

标签: perl linker shared-libraries cpan fftw


【解决方案1】:

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

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

过程如下,可以在尝试安装PDL失败后进行:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2012-02-02
    • 2010-12-14
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多