如何将 lapack 和 BLAS 库链接到 C++ 代码
Posted
技术标签:
【中文标题】如何将 lapack 和 BLAS 库链接到 C++ 代码【英文标题】:How to Link lapack and BLAS library to C++ code 【发布时间】:2013-11-10 04:29:30 【问题描述】:以上是线性代数库。我正在使用犰狳,它就像一个 c++ 包装器/框架,用于链接到 fortran 中更基本的线性代数库。
我可以通过使用带有 -I 标志的 gcc -c 选项的 #include "armadillo" 轻松编译 example.cpp。 这会生成 example.o,它现在应该静态链接到 liblapack_LINUX.a 和 libBLAS_linux.a
两者的位置:
liblapack_LINUX.a :-/home/nimish/htmlProjects/WP2/lib/lapack/
libBLAS_linux.a :-/home/nimish/HTMLProjects/WP2/lib/blas
我发出以下命令:
gcc -o example.o -L../lib/blas -lblas_LINUX -L../lib/lapack -llapack_LINUX
OR 与绝对路径
nimish@ubuntu:~$ gcc -o example.o -L/home/nimish/HTMLProjects/WP2/lib/blas -lblas_LINUX -L/home/nimish/HTMLProjects/WP2/lib/lapack -llapack_LINUX
得到错误:
/usr/bin/ld: cannot find -lblas_LINUX
collect2: ld returned 1 exit status
但是这些库确实存在 --
nimish@ubuntu:~$ find /home/nimish/HTMLProjects/WP2 -name liblapack_LINUX.a
/home/nimish/HTMLProjects/WP2/lib/lapack/liblapack_LINUX.a
nimish@ubuntu:~$ find /home/nimish/HTMLProjects/WP2 -name libblas_LINUX.a
/home/nimish/HTMLProjects/WP2/lib/BLAS/libblas_LINUX.a
我做错了什么?我对这个链接库业务以及 gcc 有点陌生。
【问题讨论】:
一开始你有一个错误的命令:dogcc example.o -o example ...
。第二个:尝试在目标文件之前放置标志:gcc -L... -l... example.o -o example
.
【参考方案1】:
首先,您需要确保使用 (+lapack) 安装了 BLAS
sudo apt-get install libblas-dev liblapack-dev
然后您可以在您的程序文件之后使用 -lblas 进行链接。或者你可以使用 make 文件。
就我而言,我更喜欢使用 OpenBlas,您可以在 makefile 中使用以下内容。
-
www.openblas.net,获取 tar.gz
将其复制到您的目录中
解压:tar -zxvf OpenBLAS-0.2.20.tar.gz
编译它:cd OpenBLAS-0.2.20
制作
完成后,您应该拥有文件 libopenblas.a,即 openblas 库
BLASLIB = OpenBLAS/libopenblas.a -lpthread【讨论】:
以上是关于如何将 lapack 和 BLAS 库链接到 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章
将具有外部依赖项的共享库集成到 MATLAB |即犰狳、LAPACK、BLAS