我正在将一个使用 clapack 的项目从 osx 转移到 linux 并遇到一些问题。我通过下载 cmake 项目、编译必要的 .h 和 .a 文件并将其移动到项目中的相关位置来使用 clapack。
我在两种情况下(osx 和 linux)都使用了相同的步骤,并且在两台机器上都有完全相同的源代码,但是我无法在 linux 上正确链接所有内容。
我的 cmake 文件中的代码行如下所示
#-----------------------------------------------------------------------------
# INCLUDE CLAPACK
#-----------------------------------------------------------------------------
INCLUDE_DIRECTORIES(${VMT_PRJ_SOURCE_DIR}/CLAPACK)
LINK_DIRECTORIES(${VMT_PRJ_SOURCE_DIR}/CLAPACK/lib)
LINK_LIBRARIES(blas f2c lapack tmglib)
我得到的错误看起来像这样
/CLAPACK/lib/liblapack.a(sgesvd.c.o): In function `sgesvd_':
sgesvd.c:(.text+0x456): undefined reference to `s_cat'
sgesvd.c:(.text+0x1fa4): undefined reference to `s_cat'
这是我第一次完成从 osx 到 linux 的移植,不知道是否有一些不同的要求我需要做出链接或问题是什么
任何帮助将不胜感激。
斯科特
最佳答案
链接的顺序很重要。由于 liblapack.a
需要来自 libf2c.a
的函数,后者需要在前者之后。如此变化
LINK_LIBRARIES(blas f2c lapack tmglib)
到
LINK_LIBRARIES(blas lapack f2c tmglib)
应该有帮助。
关于linux - 在 linux 上链接 clapack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010802/