You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用Armadillo库执行矩阵乘法出现链接报错如何解决?

问题描述

用户想要在C++中基于Armadillo库实现简单矩阵乘法,编译时报链接错误,用户代码如下:

#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;

int main() {
mat B(5, 10, fill::randu);
mat C(10, 5, fill::randu);
mat U = B * C;
return 0;
}

报错信息如下:

/usr/bin/ld: /tmp/ccA4Cqsm.o: in function `TLS wrapper function for arma::arma_rng_cxx11_instance':
main.cpp:(.text._ZTWN4arma23arma_rng_cxx11_instanceE[_ZTWN4arma23arma_rng_cxx11_instanceE]+0x25): undefined reference to `arma::arma_rng_cxx11_instance'
/usr/bin/ld: /tmp/ccA4Cqsm.o: in function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_[_ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_]+0x57): undefined reference to `wrapper2_dgemv_'
/usr/bin/ld: /tmp/ccA4Cqsm.o: in function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_[_ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_]+0x63): undefined reference to `wrapper2_dgemm_'
collect2: error: ld returned 1 exit status
报错原因

这是典型的链接阶段错误,你的代码本身语法没有问题,错误来源于编译时没有正确链接Armadillo库及其依赖的BLAS、LAPACK线性代数库,导致链接器找不到Armadillo的内置随机数实例、矩阵乘法接口等核心符号。

解决方案
  • 单文件直接编译时,在编译命令末尾添加链接Armadillo库的参数即可,假设你的源文件名为main.cpp,正确编译命令如下:
g++ main.cpp -o matrix_mul -larmadillo
  • 若执行上述命令仍报相同错误,说明你的系统中安装的Armadillo未将BLAS、LAPACK依赖合并,需要手动链接这两个基础线性代数库:
g++ main.cpp -o matrix_mul -larmadillo -lblas -llapack
  • 若使用CMake构建项目,需要在CMakeLists.txt中添加Armadillo的查找和链接配置,示例配置如下:
cmake_minimum_required(VERSION 3.10)
project(matrix_mul)

# 查找Armadillo依赖
find_package(Armadillo REQUIRED)
include_directories(${ARMADILLO_INCLUDE_DIRS})

add_executable(matrix_mul main.cpp)
# 链接Armadillo相关库
target_link_libraries(matrix_mul ${ARMADILLO_LIBRARIES})
  • 若仍报错,先检查Armadillo开发包是否正确安装:
    • Debian/Ubuntu系列系统执行:sudo apt install libarmadillo-dev
    • CentOS/RHEL/Fedora系列系统执行:sudo dnf install armadillo-devel
    • 源码编译安装的Armadillo需要在编译时额外指定库搜索路径,比如你将Armadillo安装在/opt/armadillo路径下,编译命令修改为:
    g++ main.cpp -o matrix_mul -L/opt/armadillo/lib -I/opt/armadillo/include -larmadillo -lblas -llapack
    

内容的提问来源于stack exchange,提问作者arash rezaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:15:09