与 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 链接的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 NumPy 和 SciPy 中的 BLAS/LAPACK 链接?