在MacOS Mojave 10.14.2上使用levmar库会导致编译错误

时间:2019-01-05 18:05:58

标签: g++ clang++ macos-mojave

我想在MacOS X Mojave上使用levmar库。为了编译库,我必须先编译没有错误的f2c库,然后通过cmake将其用于levmar库的编译。所有这些都可以毫无错误地进行编译,并且实际创建的示例示例演示程序“ lmdemo”也可以运行。 但是,当我尝试使用g ++编译expfit.c示例(与levmar下载一起提供)时,出现错误:

  

x86_64体系结构的未定义符号:“ dgemm ”,已引用   从:         liblevmar.a(misc.c.o)“ dgeqrf ”中的_dlevmar_trans_mat_mat_mult,引用自:         liblevmar.a(Axb.c.o)中的_dAx_eq_b_QR         liblevmar.a(Axb.c.o)“ dgesvd ”中的_dAx_eq_b_QRLS,引用自:         liblevmar.a(Axb.c.o)中的_dAx_eq_b_SVD         liblevmar.a(misc.c.o)“ dgetrf ”中的_dlevmar_pseudoinverse,引用自:         liblevmar.a(Axb.c.o)“ dgetrs ”中的_dAx_eq_b_LU,引用自:         liblevmar.a(Axb.c.o)“ dorgqr ”中的_dAx_eq_b_LU,引用自:         liblevmar.a(Axb.c.o)“ dpotf2 ”中的_dAx_eq_b_QR,引用自:         liblevmar.a(misc.c.o)“ dpotrf ”中的_dlevmar_chol,引用自:         liblevmar.a(Axb.c.o)“ dpotrs ”中的_dAx_eq_b_Chol,引用自:         liblevmar.a(Axb.c.o)“ dsytrf ”中的_dAx_eq_b_Chol,引用自:         liblevmar.a(Axb.c.o)“ dsytrs ”中的_dAx_eq_b_BK,引用自:         liblevmar.a(Axb.c.o)“ dtrtrs ”中的_dAx_eq_b_BK,引用自:         liblevmar.a(Axb.c.o)中的_dAx_eq_b_QR         liblevmar.a(Axb.c.o)“ sgemm ”中的_dAx_eq_b_QRLS,引用自:         liblevmar.a(misc.c.o)“ sgeqrf ”中的_slevmar_trans_mat_mat_mult,引用自:         liblevmar.a(Axb.c.o)中的_sAx_eq_b_QR         liblevmar.a(Axb.c.o)“ sgesvd ”中的_sAx_eq_b_QRLS,引用自:         liblevmar.a(Axb.c.o)中的_sAx_eq_b_SVD         liblevmar.a(misc.c.o)“ sgetrf ”中的_slevmar_pseudoinverse,引用自:         liblevmar.a(Axb.c.o)“ sgetrs ”中的_sAx_eq_b_LU,引用自:         liblevmar.a(Axb.c.o)“ sorgqr ”中的_sAx_eq_b_LU,引用自:         liblevmar.a(Axb.c.o)“ spotf2 ”中的_sAx_eq_b_QR,引用自:         liblevmar.a(misc.c.o)“ spotrf ”中的_slevmar_chol,引用自:         liblevmar.a(Axb.c.o)“ spotrs ”中的_sAx_eq_b_Chol,引用自:         liblevmar.a(Axb.c.o)“ ssytrf ”中的_sAx_eq_b_Chol,引用自:         liblevmar.a(Axb.c.o)“ ssytrs ”中的_sAx_eq_b_BK,引用自:         liblevmar.a(Axb.c.o)“ strtrs ”中的_sAx_eq_b_BK,引用自:         liblevmar.a(Axb.c.o)中的_sAx_eq_b_QR         liblevmar.a(Axb.c.o)ld中的_sAx_eq_b_QRLS:架构x86_64的clang找不到符号:错误:链接器命令失败并退出   代码1(使用-v查看调用)

这些似乎来自BLAS / LAPACK例行程序,不是吗? “ lmdemo”示例运行得如何?

g ++编译器提供-v选项的结果:

  

配置有:   --prefix = /应用程序/Xcode.app/Contents/Developer/usr --with-gxx-include-dir = /应用程序/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14 .sdk / usr / include / c ++ / 4.2.1   Apple LLVM版本10.0.0(clang-1000.11.45.5)目标:   x86_64-apple-darwin18.2.0线程模型:posix InstalledDir:   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

谷歌搜索问题并使用xcode-select --install解决方案无法解决问题。

有人可以帮我吗? 谢谢 Z

1 个答案:

答案 0 :(得分:0)

好,因此似乎在编译时链接levmar(-llevmar)库还不够,而且BLAS和LAPACK库(-lblas -llapack)也不够。添加这些链接后,示例expfit.c将按预期进行编译和运行。我不确定我了解这点,因为程序expfit.c不会直接使用任何blamar或lapack例程,而levmar可以。这是否意味着levmar编译时没有blas或lapack?嗯...