我目前使用的是Ubuntu code :: blocks,在尝试进行线性代数时会遇到一些问题。
在编译器设置下>搜索目录>编译器我有" / usr / include"
并在编译器设置>搜索目录>链接器我有" / user / lib"
我的liblapack-dev,libblas-dev,libboost-dev,libarmadillo-dev通过apt-get安装
我评论了代码的哪一部分给了我错误。没有代码的困难部分我的代码运行正常,所以我认为我安装armadillo很好?那么为什么我无法访问它的所有功能呢?
#include <iostream>
#include <armadillo>
using namespace arma;
using namespace std;
int main()
{
mat A;
A<<1<<2<<endr<<3<<4;
cout<<A;
vec e=A.col(0);
vec r=A.col(1);
cout<<endl<<e<<endl<<r<<endl;//works perfectly up to here
//if only there was not more of these codes
cout<<e*r<<endl;//doesnt work from here anymore
float y=dot(A,A);//from here on i get the error message:
cout<<y<<endl;//'wrapper_ddot_' is not defined
double z=as_scalar(e*r);//and wrapper_blas.hpp file opens
double t=dot(e,r);
cout<<z<<endl;//and points me to line 185
return 0;//with an error
}
答案 0 :(得分:0)
代码中存在错误。您使用的是e*r
,但它们都是2x1,因此您需要将e
转换为e.t()*r
,以便获得1x1的产品。下面三行也有同样的问题。如果您使用apt-get
安装了Armadillo,通常不需要添加blas / lapack库。将-larmadillo
标志用于链接器就足够了。