Code::Blocks 20.03链接LAPACK至Armadillo时出错求助
Windows下Code::Blocks 20.03配置Armadillo库链接错误解决方法
问题描述
在Windows系统的Code::Blocks 20.03中配置Armadillo库时,已下载x64版本的Ref BLAS、LAPACK、LAPACKE库文件(dll+lib),并在Settings>Linker Settings和Project>Build options>Linker settings中添加了库文件路径,修改了Armadillo的config.hpp,但编译时出现以下链接错误:
||=== Build: Debug in 'project' (compiler: GNU GCC Compiler) ===| ld.exe||cannot find -lblas.lib| ld.exe||cannot find -llapack.lib| ld.exe||cannot find -llapacke.lib| ||error: ld returned 1 exit status| ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 7 second(s)) ===|
错误中提到的-lblas.lib等并非手动添加的链接参数,而是自动生成的。
解决步骤
1. 修正Armadillo的config.hpp配置
打开Armadillo安装目录下的include\armadillo_bits\config.hpp文件,找到以下宏定义:
#define ARMA_USE_LAPACK #define ARMA_USE_BLAS
Armadillo启用这些宏后,会自动向链接器传递-lblas、-llapack等参数,但这些参数对应的库命名规则和你下载的libblas.lib不匹配(GCC的-l参数会自动省略lib前缀和.lib后缀)。解决方式二选一:
- 方式一:注释掉自动链接宏,改为手动链接:
// #define ARMA_USE_LAPACK // #define ARMA_USE_BLAS - 方式二:将下载的库文件重命名为
blas.lib、lapack.lib、lapacke.lib,让自动链接的参数能匹配到对应文件。
2. 调整Code::Blocks的链接器设置
- 打开
Project > Build options > Linker settings,删除之前添加的libblas.lib等条目,改为添加库文件的完整绝对路径,比如C:\your_lib_path\libblas.lib。 - 同时在
Search directories > Linker中添加库文件所在的文件夹路径(比如C:\your_lib_path),确保链接器能搜索到相关库文件。
3. 确保编译器与库的位数匹配
- 确认下载的库是x64版本,同时将Code::Blocks的GCC编译器设置为x64模式:
- 打开
Settings > Compiler > Toolchain executables,检查编译器路径是否指向x64版本的GCC(比如mingw-w64的x64目录)。 - 进入
Project > Build options > Compiler settings > Other options,添加-m64参数,强制编译x64程序。
- 打开
4. 放置DLL文件到可访问路径
将下载的libblas.dll、liblapack.dll、liblapacke.dll复制到以下任意一个位置:
- 项目的可执行文件输出目录(如
project\bin\Debug) - Code::Blocks编译器的bin目录(如
mingw64\bin)
内容的提问来源于stack exchange,提问作者new_and_stuck
相关产品推荐
相关产品推荐

