Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 我如何告诉CPAN安装的PDL使用我的FFTW路径?_Perl_Linker_Shared Libraries_Cpan_Fftw - Fatal编程技术网

Perl 我如何告诉CPAN安装的PDL使用我的FFTW路径?

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

我需要作为非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 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编译实例使用本地安装的副本

我尝试了以下方法:

  • 在.bash\u配置文件中设置LD\u LIBRARY\u路径,是的,导出它——没有骰子
  • 接下来,我将
    cpan
    中的
    o conf makepl_arg
    设置为:
    LIBS=-L/homedir/lib INC=-I/homedir/include
    ——仍然没有骰子
  • 我做了与步骤2相同的操作,但是对于
    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
    以指向适当的位置
  • 尝试使用CPAN再次安装PDL

  • 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
    之前不退出,则不需要执行此操作。