2013-05-14 48 views
2

我需要通过CPAN安装Perl PDL library作为非root用户。如何告知CPL的CPAN安装使用我的FFTW路径?

CPAN非root工作得益于这太问题:How can I use CPAN as a non-root user?

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

我此基础上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. 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. 我做了同步骤但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”

未来
+0

仔细检查您在步骤2中做了什么,请。当你执行'make conf_arg'时,你看到'LIBS = -L/homedir/lib INC = -I/homedir/include'吗? – ikegami 2013-05-14 00:53:02

+0

(步骤3使用了'mbuild_arg'不正确的值,但PDL使用'makepl_arg',所以不是一个问题。) – ikegami 2013-05-14 00:55:14

+0

我只是试图再次池上,但不幸的是问题仍然存在。 – EMiller 2013-05-14 01:20:28

回答

0

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

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

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

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

有点令人困惑,PDL不符合makepl_arg cpan配置。