如何告知CPL安装PDL以使用我的FFTW路径?

时间:2013-05-14 00:42:48

标签: perl linker shared-libraries cpan fftw

我需要通过CPAN作为非root用户安装Perl PDL library

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

现在,PDL依赖于FFTW库。显然,当我需要64位这台机器时,我的sysadmin安装了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?后,我将o conf makepl_arg中的cpan设置为:LIBS=-L/homedir/lib INC=-I/homedir/include - 仍然没有骰子
  3. 我做的与第2步相同,但o conf mbuild_arg ---再次,没有骰子。
  4. 这些尝试都没有对上面的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'

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. .cpan/build/PDL-*/perldl.conf文件复制到~/.perldl.conf - 注意文件名前添加的. - PDL会在安装时查找此文件,即使在CPAN下也是如此
  2. 修改FFTW__LIBS中的FFTW_INC~/.perldl.conf以指向相应的位置。
  3. 使用CPAN再次尝试安装PDL。
  4. 有点令人困惑的是PDL不遵守makepl_arg cpan配置。