1

我的 makefile 中有几个文件需要一起编译,如下所示(现在名称是虚拟的):

compile:
        g++ prog1.cpp func1.cpp func2.cpp func3.cpp -L/usr/lib/ -lmkl_lapack64 -lmkl 
        -lguide -lpthread -o output_ready.out

当我做编译时,我得到以下错误:

/usr/bin/ld: cannot find -lmkl_lapack64                                                                                                                                                
/usr/bin/ld: cannot find -lmkl                                                                                                                                                         
/usr/bin/ld: cannot find -lguide                                                                                                                                                       
collect2: ld returned 1 exit status                                                                                                                                                    
make: *** [compile] Error 1 

该程序之前已在另一台机器上正确编译。

问:如果正确,我如何检查 lapack lib 的路径?我应该如何修复它们?库已安装(不确定路径是否正确)。

非常感谢任何有用的评论。R

4

4 回答 4

1

首先,我会建议您按照您自己的计划检查库是否安装在正确的目录中。一个明显的方法是 cd/usr/lib并查看是否有任何 lapack 库(您会立即注意到它们)。

如果所有东西都安装在它应该在的地方,我建议你编译

-I /usr/local/include/lapackpp/ 

对于标题,和

-L /usr/local/lib -llapackpp 

对于库,因为所有 lapack 库都应该通过它访问。

另外,您确定要查找 中的库/usr/lib,而不是 中的库/usr/local/lib吗?不过,我想这是特定于操作系统/设置的。

最后,前段时间我遇到了与您遇到的类似问题,并在此网站上找到了一个很好且明确的解释。:-)

于 2013-03-06T15:49:07.570 回答
1

他查找 lapack 库的唯一路径是/usr/lib- 因为这是您为链接器指定的唯一目录。如果库安装在另一个位置,您将不得不找到它并

  • 通过另一个-L参数将该位置提供给链接器,
  • 或将库移动到/usr/lib

所以链接器可以找到库。

于 2013-03-05T15:42:52.273 回答
1

我认为您不需要-L/usr/lib,因为我相信编译器已经知道在那里寻找库。也就是说,-L<path to where lapack libraries are>如果它们没有安装在标准位置,您确实需要。

于 2013-03-05T15:45:51.250 回答
0

根据您的操作系统、体系结构等查找正确的编译器和链接器标志的绝佳方法是使用英特尔在线工具,您可以在此处找到该工具:

https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor

要访问它,您需要登录英特尔网站。

于 2018-08-01T13:21:42.603 回答