Perl 我如何告诉CPAN安装的PDL使用我的FFTW路径?
我需要作为非root用户通过CPAN安装Perl 由于这个问题,非根目录的CPAN可以工作: 现在,PDL依赖于FFTW库。显然,当我需要这台机器的64位版本时,我的系统管理员安装了32位版本 我基于CPAN安装期间的以下错误消息:Perl 我如何告诉CPAN安装的PDL使用我的FFTW路径?,perl,linker,shared-libraries,cpan,fftw,Perl,Linker,Shared Libraries,Cpan,Fftw,我需要作为非root用户通过CPAN安装Perl 由于这个问题,非根目录的CPAN可以工作: 现在,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
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编译实例使用本地安装的副本
我尝试了以下方法:
cpan
中的o conf makepl_arg
设置为:LIBS=-L/homedir/lib INC=-I/homedir/include
——仍然没有骰子o conf mbuild_arg
——同样,没有骰子gcc
行产生任何影响;没有使用-L
标志指定其他路径
我还可以在cpan
中尝试什么来获取此编译命令以引用我的fftw副本
更新1
我应该补充一点,在进行任何更改之前,makepl_arg
是:
makepl\u 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”解决方案是检查.cpan/build/PDL-*/
目录
在其中,安装文件指示可以修改perldl.conf
文件,以指示指向FFTW libs和FFTW include目录的路径
该过程如下所示,在尝试安装PDL失败后可以完成:
.cpan/build/PDL-*/perldl.conf
文件复制到~/.perldl.conf
-注意在文件名之前添加的
-即使在cpan下,PDL也会在安装时查找此文件~/.perldl.conf
中修改FFTW\u LIBS
和FFTW\u INC
以指向适当的位置PDL不符合
makepl_arg
cpan配置有点令人困惑。请仔细检查步骤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
之前不退出,则不需要执行此操作。