代码之家  ›  专栏  ›  技术社区  ›  Void

在集群上链接到GNU科学图书馆?

  •  1
  • Void  · 技术社区  · 7 年前

    我正在运行一个代码( iHARM2D )这需要 GNU scientific library library (GSL)在集群上。由于集群上没有安装GSL库,因此我必须在那里编译它,并在编译实际代码时正确链接它。我在shell脚本中编写

    cd whereGSLsource
    ./configure --prefix=/homefolder/iHARM/GSLcompiled
    make && make install
    

    这将编译GSL并将结果放入/homefolder/iHARM/GSLcompiled/lib、/homefolder/iHARM/GSLcompiled/include等。

    根据 this answer ,在编译主代码之前,我应该能够通过在shell脚本中写入以下行来进行编译

    export CPATH="/homefolder/iHARM/GSLcompiled/include":$CPATH
    export LIBRARY_PATH="/homefolder/iHARM/GSLcompiled/lib":$LIBRARY_PATH
    

    然而,这似乎没有正确链接GSL,因为编译返回类型为“未定义的对` GSL\u some\u函数'的引用”的错误。(当使用默认安装和链接GSL时,它在我的计算机上工作。)

    GSL输出在编译或 是修改LD\u LIBRARY\u PATH变量

    LD_LIBRARY_PATH="/homefolder/iHARM/GSLcompiled/lib":$LD_LIBRARY_PATH
    

    但这也得到了同样的结果。类似地,当我尝试使用-L和-I选项链接时,情况并非如此

    cd iHARM
    gcc -someoptions -I../GSLcompiled/include/ -L../GSLcompiled/lib ./some.o -o harm
    

    gcc -someoptions -Wl,-rpath -Wl,"/homefolder/iHARM/GSLcompiled/lib" ./some.o -o harm
    

    那么,如何正确链接GSL?

    (我在这方面不是很有经验,所以这也可能是一些真正基本的语法错误。)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Basile Starynkevitch    7 年前

    先运行 configure --help --enable-static 您要使用的选项。

    顺便说一句,你可以(也可能应该)在你的笔记本电脑上安装Linux并在上面编译(然后 scp

    你最好分享一个共同点 --prefix 对于您所有的autoconf-ed软件。看见 this documentation of autoconf . 假设您总是使用 --prefix=$HOME/soft

    你可以用 make make install DESTDIR=/tmp/gslinst /tmp/gslinst 您将对其进行检查,然后将其适当复制到与前缀相关的目录中。

    libgsl.a libgslcblas.a . 在我的Debian系统上 libgsl-dev 包提供了它们(所以我不需要重建它)。

    $HOME/soft/lib/libgsl.a 在链接中明确显示 gcc harm

     gcc some.o $HOME/soft/lib/libgsl.a -o harm
    

    但是YMMV。参数顺序 通用条款

    你不需要也不想惹麻烦 $LD_LIBRARY_PATH -Wl,-rpath 具有静态链接。了解 rpath 当您需要动态链接时。

    另请参见 pkg-config 说明。