3

我正在尝试编译一个巨大的软件包,这是我似乎无法弄清楚的最后一个障碍。

我收到如下错误:

RNDiracDeterminantBase.cpp:(.text+0x22bf): undefined reference to `dgetrf_'
RNDiracDeterminantBase.cpp:(.text+0x2524): undefined reference to `dgetri_'
RNDiracDeterminantBase.cpp:(.text+0x3005): undefined reference to `dgetri_'
../../lib/libqmcwfs.a(RNDiracDeterminantBase.cpp.o): In function `qmcplusplus::RNDiracDeterminantBase::ratio(qmcplusplus::ParticleSet&, int, qmcplusplus::ParticleAttrib<qmcplusplus::TinyVector<double, 3u> >&, qmcplusplus::ParticleAttrib<double>&)':
RNDiracDeterminantBase.cpp:(.text+0x4156): undefined reference to `dgemv_'
RNDiracDeterminantBase.cpp:(.text+0x420f): undefined reference to `dger_'

谷歌透露这些参考资料是英特尔的 MKL 库。但是,我不知道我需要链接什么文件。我试过 libmkl_core.a、libmkl_gnu_thread.a、libmkl_blacs_intelmpi_lp64.a 等。有很多文件:

/mkl/lib/intel64/

如果需要,可以发布更多信息。

4

3 回答 3

10

我不知道我需要链接什么文件。我试过 libmkl_core.a、libmkl_gnu_thread.a、libmkl_blacs_intelmpi_lp64.a 等。有很多文件:/mkl/lib/intel64/

有大量文件的事实并不意味着您必须依次尝试每个库。

要找出哪个库定义了您想要的符号,请运行以下命令:

cd /mkl/lib/intel64
nm -A *.a | egrep '[TWBD] (dger_|dgemv_|dgetrf_|dgetri_)$'

还要确保将库放在链接行的末尾,因为命令行上存档库的顺序很重要

于 2013-04-11T03:17:40.723 回答
4

根据您提供的不完整信息,您可能需要 libmkl_intel_lp64.a、libmkl_gnu_thread.a 和 libmkl_core.a。

英特尔 MKL 有一个内置工具可帮助您找出链接:/mkl/tools/mkl_link_tool。该工具也可从以下网站获得:http: //software.intel.com/en-us/articles/intel-mkl-link-line-advisor。使用此工具获取适合您情况的确切链接线。

您应该在 MKL 官方论坛 ( http://software.intel.com/en-us/forums/intel-math-kernel-library ) 上提出您的问题。您将在数小时而不是数天之内获得此类问题的答案。

于 2013-04-13T05:13:01.770 回答
3

在 Windows 上设置 mingw 时我遇到了类似的问题。

以下库链接顺序适用于 gcc:

  1. mkl_intel_thread
  2. mkl_rt
  3. mkl_core
  4. mkl_intel_lp64

希望这可以帮助任何遇到此问题的人。

于 2017-12-07T16:55:53.397 回答