我正在尝试编译一个巨大的软件包,这是我似乎无法弄清楚的最后一个障碍。
我收到的错误如下:
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位/
如果需要,可以发布更多信息。
答案 0 :(得分: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_)$'
还要确保将库放在链接行的 end 上,作为命令行matters上归档库的顺序。
答案 1 :(得分: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)上提出您的问题。你可以在几小时而不是几天内得到这类问题的答案。
答案 2 :(得分:1)
在Windows上设置mingw时遇到了类似的问题。
以下库链接顺序适合我使用gcc:
希望这有助于任何人解决这个问题。