64位环境下,Armadillo + VS2010出现链接错误的解决

在学习数据挖掘和机器学习的时候,很多时候,用矩阵求解的方法是很简便的,但是C++要完成矩阵运算,自己写实现显然是工程浩大的。因此我们常常借助第三方函数库来解决问题。

找了好几天基本线性代数的库,看到有人推荐说Armadillo,看他给的安装教程也挺简单的,就尝试了一下。结果,弄了一整天才能够正常运行。罪魁祸首是编译器的编译环境设置问题

 

下面就具体说一下x64环境下,Armadillo + Vs2010的安装和配置方法。

1、  下载Armadillo(官网:http://arma.sourceforge.net/),得到下面的包;

                                                 

2、  将其解压,得到如下目录:


 

3、  用文本编辑器打开include/armadillo_bits/config.hpp,将下图中红框里的两句话去掉前面的注释符。去掉注释表示使用BLAS和LAPACK,据说能提高速度。


 

4、  打开VS2010,新建一个win32的工程;



5、  右击新建的项目,选择属性,出来下面的东西:



6、   选择VC++目录一项,将包含目录设置为你解压后,include文件夹的路径(记住,一定是知道include这一级,我就多进入了一级目录,错了。);

将库目录设置为解压后example里的lib文件夹;设置后如下:



7、   接着选C/C++里的常规项,设置附加包含目录,同样为上述的include文件夹路径:



8、   选择链接器/常规,将附加库目录设置为上述的lib文件夹路径:



9、  选择链接器/输入,将附加依赖项里添加lib文件夹里的两个lib文件:



10、             OK,点击确定,在cpp里写测试代码试一下:

#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
	arma::mat A = arma::randu<arma::mat>(1000, 1000) * 10;
	arma::mat B = arma::randu<arma::mat>(1000, 1000) * 10;
	arma::mat C = A % B;
	//A.print("A = \n");
	cout << endl << A(3,3) << endl;
	A(3,3) = 0.111111;
	cout << endl << A(3,3) << endl;
	mat D;
	double arr[10]={1,2,3,4,5,6,7,8,9,10};
	D << arr[0] << arr[1] << arr[2] << endr
		<< arr[3] << arr[4] << arr[5] << endr
		<< arr[6] << arr[7] << arr[8] << endr;
	mat E = D.i();
	E.print();
	A.print("A = \n");
	B.print("B = \n");
	C.print("A .* B = \n");
	system("pause");
	return 0;
}


11、              是不是惊喜第发现,可以运行了??!!其实你错了,你在换个矩阵乘法,矩阵求逆测试一下!看到了吧!傻眼!



12、              上网狂搜各种教程和问题,都没找到解决办法。后来有个人的帖子提醒了我,说32位的lib和64位的lib是有区别的,混用可能会出这样的链接问题,因此,将编译器的编译环境改为x64的。

13、              选择生成/配置管理器:



14、              在出来的框框里,在平台那里新建一个x64的,图中为已经建了x64的,所以有x64的选项。



15、             是不是觉得这下子可以用了呢?编译一下,哟西,编译成功了,运行呢?提示缺少dll文件。哈哈,别急,还有装个MinGW。装完之后在安装目录的bin文件夹里就可以找到所需的dll文件。将其拷贝到编译出来的exe所在的文件夹里。

16、              最后还差一步,就是把上述Armadillo的lib文件夹里的两个dll文件也拷到exe所在的文件夹里,OK,可以了。

 

 

【】

其实,在这里(http://icl.cs.utk.edu/lapack-for-windows/lapack/#libraries_mingw)已经把运行LAPACK的要求写得很清楚了,一步步弄完就ok了。

其实问题的关键是,你下载到的lib是32位的还是64位的,根据这个来调整一下编译器的编译环境就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值