我需要通过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编译实例使用本地安装的副本。
我尝试了以下内容:
o conf makepl_arg
中的cpan
设置为:LIBS=-L/homedir/lib INC=-I/homedir/include
- 仍然没有骰子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 :(得分:0)
解决方案是检查.cpan/build/PDL-*/
目录。
在其中,INSTALL文件指示可以修改perldl.conf
文件以指示FFTW库和FFTW包含目录的路径。
该过程如下所示,可以在尝试安装PDL失败后完成:
.cpan/build/PDL-*/perldl.conf
文件复制到~/.perldl.conf
- 注意文件名前添加的.
- PDL会在安装时查找此文件,即使在CPAN下也是如此FFTW__LIBS
中的FFTW_INC
和~/.perldl.conf
以指向相应的位置。有点令人困惑的是PDL不遵守makepl_arg
cpan配置。