gpt4 book ai didi

c++ - 链接到集群上的 GNU 科学图书馆?

转载 作者:行者123 更新时间:2023-11-30 03:28:27 25 4
gpt4 key购买 nike

我正在运行需要 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_some_function' 的 undefined reference ”类型的错误。 (当使用 GSL 的默认安装和链接时,它在我的电脑上工作。)

编译期间 GSL 输出建议的另一种可能性或 this answer就是修改LD_LIBRARY_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

GSL 建议的另一个选项是使用

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

然而,这些都不起作用。

我该如何正确链接 GSL?

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

最佳答案

先运行configure --help;您会发现它接受您确实想要使用的 --enable-static 选项。

顺便说一句,您可以(而且可能应该)在您的笔记本电脑上安装 Linux 并在其上进行编译(然后 scp 一个主要静态链接的二进制文件到您的集群)。

您最好为所有自动配置软件共享一个通用的--prefix。参见 this .阅读 documentation of autoconf .假设您总是使用 --prefix=$HOME/soft(不需要任何 root 权限)。

您可以使用 make 进行编译,然后执行 make install DESTDIR=/tmp/gslinst 以便安装的东西进入 /tmp/gslinst您将对其进行检查,然后将其适本地复制到与您的前缀相关的目录中。

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

然后您将使用这些静态库。您可以为它们提供完整路径,即在您的链接 gcc 命令中明确使用 $HOME/soft/lib/libgsl.a harm,例如链接到

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

但是 YMMV。 gcc 的参数顺序很重要。

您不需要或不想用静态链接来扰乱 $LD_LIBRARY_PATH-Wl,-rpath。了解 rpath当你想要动态链接时。

另请参阅 pkg-config 的内容。

关于c++ - 链接到集群上的 GNU 科学图书馆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com