与 BLAS OS X 链接

Posted

技术标签:

【中文标题】与 BLAS OS X 链接【英文标题】:Linking with BLAS OS X 【发布时间】:2015-09-12 10:42:29 【问题描述】:

我目前正在尝试使用我不太熟悉的库来编译程序。当我运行编译器时,我得到以下输出/错误:

Undefined symbols for architecture x86_64:
  "_cblas_ddot", referenced from:
      shark::LDA::train(shark::LinearClassifier<shark::blas::vector<double> >&, shark::LabeledData<shark::blas::vector<double>, unsigned int> const&) in libshark.a(LDA.cpp.o)
      shark::LDA::train(shark::LinearClassifier<shark::blas::vector<double> >&, shark::WeightedLabeledData<shark::blas::vector<double>, unsigned int> const&) in libshark.a(LDA.cpp.o)

我目前的想法是,这是由于缺少 BLAS 库,我刚刚下载并编译(来自 fortran 代码?)。

用于编译的命令行参数看起来像 thsi

g++ -o example -I/to/boost/include -I/to/shark/include -L/to/boost/lib -L/to/shark/lib -L/to/BLAS -lshark -lblas -l(boost_flags)

/to/BLAS 有一个libblas.a,我跑了nm libblas.a,它给出了一条线

libblas.a(ddot.o):
00000000000001c0 s EH_frame1
0000000000000000 T _ddot_

不至于太安全,我假设这意味着库确实有符号,但没有 _cblas_ 前缀。

从这一点上我能做些什么?我可以更改符号名称吗?还是我需要将此库与其他内容链接?

我使用 OS X Mavericks

提前致谢:)

【问题讨论】:

您是否有权访问源文件 LDA.cpp?从表面上看,您可能需要在链接中添加一些内容,如果您能找到要添加的内容的线索。检查 LDA.cpp 可能会提供这样的线索。 我什至不确定我是否有 LDA,我会调查一下,谢谢! 【参考方案1】:

OS X 附带已安装的 BLAS(包括 cblas)(它是 Accelerate.framework 的一部分)。无需下载和构建您自己的。只需链接-lcblas

【讨论】:

啊该死的!我试过 -lblas 没有运气。这可能为我节省了一些时间。 -lblas 实际上也可以工作。问题是链接器正在查找您的 /to/BLAS/libblas.a(它没有 cblas 接口)而不是系统 blas 库(它有)。【参考方案2】:

解决方案是 Logicrat 建议的,我需要其他文件,我从 here 下载了源代码并使用 cmake/make 非常无缝地构建它。与由此产生的库链接解决了该问题。

【讨论】:

以上是关于与 BLAS OS X 链接的主要内容,如果未能解决你的问题,请参考以下文章

将 C++ 与 BLAS 和 LAPACK 连接起来

将 C++ 与 BLAS 和 LAPACK 连接起来

如何检查 NumPy 和 SciPy 中的 BLAS/LAPACK 链接?

如何将 lapack 和 BLAS 库链接到 C++ 代码

将犰狳 lapack blas 链接到代码时出错:未定义对“dtrsm_”的引用

使用 GPU 的犰狳 (+BLAS)