gpt4 book ai didi

c++ - 尝试安装和使用 LAPACK++,加载共享库时出现问题

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

我是使用库的新手,我在使用 lapack++ 和让它工作时遇到了一些问题。我将解释到目前为止我所做的和尝试的事情。

首先,我安装了 BLAS 和 LAPACK,一切顺利。我现在已经安装了 LAPACK++ 版本 2.5.2 (http://lapackpp.sourceforge.net/),因此我可以在 C/C++ 中调用各种线性代数例程。在我配置、make 然后 make install 之后,它将所有 C/C++ 头文件放在/usr/local/include/lapackpp/中,其中一些是..

arch.h
bmd.h
gmf.h
lapackc.h
lautil.h
spdmd.h
ultgmd.h
bfd.h
...

还有/usr/local/lib 中的以下文件

liblapackpp.la
liblapackpp.so
liblapackpp.so.14
liblapackpp.so.14.2.0

现在如果我尝试使用 g++ 编译简单的代码

#include <lapackpp/lapackpp.h>
using namespace std;

int main(int argc, char** argv) {
return 0;
}

我得到以下输出...

In file included from /usr/local/include/lapackpp/lapackc.h:14,
from /usr/local/include/lapackpp/lapack.h:10,
from /usr/local/include/lapackpp/lapackpp.h:16,
from test.cpp:1:
/usr/local/include/lapackpp/lacomplex.h:45:23: error: laversion.h: No such file or directory
/usr/local/include/lapackpp/lacomplex.h:48:17: error: f2c.h: No such file or directory
In file included from /usr/local/include/lapackpp/lapackpp.h:47,
from test.cpp:1:
/usr/local/include/lapackpp/latmpl.h:36:22: error: lafnames.h: No such file or directory

我通过在导致问题的头文件中明确写入头文件的位置来解决这个问题。

例如。我换了 #包括和 #包括

执行此操作后,我的代码可以正常编译。

现在如果我尝试编译代码

#include <cstdlib>
#include <iostream>
#include <lapackpp/lapackpp.h>

using namespace std;

int main(int argc, char** argv) {

LaGenMatDouble A(5,5);
cout << "This is a test." << endl;

return 0;
}

通过输入

g++ test.cpp -o test -I usr/local/include/lapackpp

我得到以下错误

/tmp/ccAq6nkP.o: In function `main':
test.cpp:(.text+0x22): undefined reference to `LaGenMatDouble::LaGenMatDouble(int, int)'
test.cpp:(.text+0x4f): undefined reference to `LaGenMatDouble::~LaGenMatDouble()'
test.cpp:(.text+0x67): undefined reference to `LaGenMatDouble::~LaGenMatDouble()'
collect2: ld returned 1 exit status

(关于 LaGenMatDouble 的信息是 here )

这表明我可能链接到库有误?

经过一番谷歌搜索后,我意识到我需要使用 -I 链接到头文件,通过 -L 链接到共享库,通过 -llapackpp 链接到库本身,所以我输入了

g++ test.cpp -o test -I usr/local/include/lapackpp -L usr/local/lib -llapackpp

它编译了代码,现在当我通过输入 ./test 运行程序时我出错了

./test: error while loading shared libraries: liblapackpp.so.14: cannot open shared object file: No such file or directory

现在我很困惑。

我不确定这是否与问题有关,但是当我输入时

pkg-config lapackpp --libs

我明白了

在 pkg-config 搜索路径中找不到软件包 lapackpp。也许你应该添加包含 `lapackpp.pc' 的目录到 PKG_CONFIG_PATH 环境变量找不到包 'lapackpp'

lapack 和 blas 也是如此。

我不确定该怎么做。非常感谢任何帮助,谢谢!

最佳答案

链接正常,因为你告诉链接器库在哪里,但执行失败,因为加载器不知道你的库的位置(你可以检查执行 ldd yourapp,它显示了您的应用程序所需的库)。

通常,您可以通过变量 LD_LIBRARY_PATH 告诉加载器库的位置来解决这个问题,但这是一个粗糙的工具。一种不同的解决方案是直接在可执行文件中对该指令进行编码,如所述here ,或者简单地使用开关 -static

静态链接您的应用程序

关于c++ - 尝试安装和使用 LAPACK++,加载共享库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718800/

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