2

我是 g++ 和 lapack 的新手,并尝试使用它们。我在尝试编译以下幼稚代码时遇到了问题

#include <lapackpp.h>
int main()
{
    LaGenMatDouble A;
    return 0;
}

如果我运行命令

$g++ -L/usr/local/lib -llapackpp test2.cpp 

其中 test2.cpp 是 cpp 文件的名称,终端会报错:

test2.cpp:1:22: fatal error: lapackpp.h: No such file or directory

但是如果我运行命令:

$g++ -I/usr/local/include/lapackpp -L/usr/local/lib -llapackpp test2.cpp

终端会报错:

/tmp/ccUi11DG.o: In function `main':  
test2.cpp:(.text+0x12): undefined reference to `LaGenMatDouble::LaGenMatDouble()'  
test2.cpp:(.text+0x23): undefined reference to `LaGenMatDouble::~LaGenMatDouble()'  
collect2: ld returned 1 exit status

顺便说一句,如果我运行命令

$pkg-config lapackpp --libs

结果是

-L/usr/local/lib -llapackpp 

你能帮我解决这个问题吗?提前致谢!

4

2 回答 2

1

Lapack 需要 fortran 库,这就是它的-lgfortran来源。此外,为编译器提供该库的确切方式似乎取决于 Linux 发行版。从文档中:

要求

这个包需要包“blas”、“lapack”(没有“++”)和一个 Fortran 编译器。在大多数 Linux 上,这些都以“blas”和“lapack”的名称作为预编译的二进制文件提供。对于 SuSE 10.x,Fortran 编译器以包“gfortran”的形式提供。对于 SuSE 9.x,Fortran 编译器以包“gcc-g77”的形式提供。

不知道为什么pkg-config lapackpp --libs不列出-lgfortran

-I/usr/local/include/lapackpp指定 lapackpp 相关的头文件。没有它,当您尝试包含它时,编译器无法找到 lapackpp.h ( #include <lapackpp.h>) - 请参阅您的问题中的编译器错误

于 2012-04-06T10:16:11.520 回答
0

我终于解决了这个问题,但仍然想知道为什么会这样。可以将 cpp 文件链接到 lapackpp 库的唯一命令是:

g++ foo.cpp -o foo -lgfortran -llapackpp -I/usr/local/include/lapackpp

-lgfortran如果没有,或-I/usr/local/include/lapackpp替换为,它将无法工作-L/usr/local/lib

有人有答案吗?

于 2012-04-06T03:32:28.360 回答