g++ - 在 MacOS Mojave 10.14.2 上使用 levmar 库会导致编译错误
问题描述
我想在 MacOS X Mojave 上使用 levmar 库。为了编译库,我必须首先编译没有错误的 f2c 库,然后使用它通过 cmake 编译 levmar 库。所有这些编译都没有错误,并且创建的示例演示程序“lmdemo”实际运行。但是,当我尝试使用 g++ 编译 expfit.c 示例(随 levmar 下载提供)时,出现错误:
架构 x86_64 的未定义符号:“ dgemm ”,引用自:liblevmar.a(misc.co) 中的 _dlevmar_trans_mat_mat_mult “ dgeqrf ”,引用自:liblevmar.a(Axb.co) 中的_dAx_eq_b_QR liblevmar.a(Axb.co) 中的_dAx_eq_b_QRLS “ dgesvd ”,引用自:liblevmar.a(Axb.co) 中的_dAx_eq_b_SVD liblevmar.a(misc.co) 中的_dlevmar_pseudoinverse “ dgetrf ”,引用自:liblevmar.a(Axb.co) 中的_dAx_eq_b_LU “ dgetrs ”,引用自: _dAx_eq_b_LU in liblevmar.a(Axb.co) " dorgqr ", 引用自: _dAx_eq_b_QR in liblevmar.a(Axb.co) " dpotf2",引用自:liblevmar.a(misc.co) 中的 _dlevmar_chol " dpotrf ",引用自:liblevmar.a(Axb.co) 中的 _dAx_eq_b_Chol" dpotrs ",引用自:liblevmar.a(Axb.co) 中的 _dAx_eq_b_Chol" dsytrf ",引用自:liblevmar.a(Axb.co) 中的 _dAx_eq_b_BK" dsytrs ",引用自:liblevmar.a(Axb.co) 中的_dAx_eq_b_BK " dtrtrs ",引用自:liblevmar.a(Axb.co) 中的_dAx_eq_b_QR liblevmar.a(Axb.co)“ sgemm ”中的_dAx_eq_b_QRLS,引用自:liblevmar.a(misc.co)中的_slevmar_trans_mat_mat_mult“ sgeqrf",引用自:liblevmar.a(Axb.co) 中的 _sAx_eq_b_QR,liblevmar.a(Axb.co) 中的 _sAx_eq_b_QRLS “ sgesvd ”,引用自:liblevmar.a(Axb.co) 中的 _sAx_eq_b_SVD _slevmar_pseudoinverse 在 liblevmar.a(misc. co) “ sgetrf ”,引用自:liblevmar.a(Axb.co) 中的_sAx_eq_b_LU “ sgetrs ”,引用自:liblevmar.a(Axb.co) 中的_sAx_eq_b_LU “ sorgqr ”,引用自:liblevmar.a(Axb)中的_sAx_eq_b_QR .co) “ spotf2 ”,引用自:liblevmar.a(misc.co) 中的 _slevmar_chol “ spotrf ”,引用自:liblevmar.a(Axb.co) 中的 _sAx_eq_b_Chol “ spotrs",引用自:liblevmar.a(Axb.co) 中的_sAx_eq_b_Chol " ssytrf ",引用自:liblevmar.a(Axb.co) 中的_sAx_eq_b_BK" ssytrs ",引用自:liblevmar.a(Axb.co) 中的_sAx_eq_b_BK" strtrs ",引用自:liblevmar.a(Axb.co) 中的 _sAx_eq_b_QR liblevmar.a(Axb.co) 中的 _sAx_eq_b_QRLS ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用-v 查看调用)
这些似乎来自 BLAS/LAPACK 例程,不是吗?'lmdemo' 示例如何运行良好?
g++ 编译器为 -v 选项提供了这个结果:
配置: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/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/目录/开发者/工具链/XcodeDefault.xctoolchain/usr/bin
谷歌搜索问题并使用 xcode-select --install 的解决方案没有解决问题。
任何人都可以帮助我吗?谢谢Z
解决方案
好的,所以似乎在编译时链接 levmar (-llevmar) 库以及 BLAS 和 LAPACK 库 (-lblas -llapack) 是不够的。添加这些链接后,示例 expfit.c 将按预期编译和运行。我不确定我是否理解这一点,因为程序 expfit.c 不直接使用任何只有 levmar 的 blas 或 lapack 例程。这是否意味着 levmar 是在没有 blas 或 lapack 的情况下编译的?嗯……
推荐阅读
- python-3.x - AttributeError:“str”对象没有属性“left”,root 不被视为节点
- javascript - 我需要整理一下这个测验
- c# - Search based on number of words in term using nest elastic
- javascript - Jest 中的模拟过程方法
- c++ - GDB 在核心文件上使用“符号文件”命令读取符号
- c++ - 编译一个简单的C++程序时的一个问题
- php - 如何通过 FormRequest 传递非必填字段?
- php - 在理解如何在 while 循环中获取数据时遇到问题
- excel - 动态颜色渐变
- php - 如何使用 zf3 和 symfony 控制台实现控制台命令