64位环境下,Armadillo + VS2010出现链接错误的解决
2014-04-08 21:35
369 查看
在学习数据挖掘和机器学习的时候,很多时候,用矩阵求解的方法是很简便的,但是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里写测试代码试一下:
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位的,根据这个来调整一下编译器的编译环境就可以了。
找了好几天基本线性代数的库,看到有人推荐说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位的,根据这个来调整一下编译器的编译环境就可以了。
相关文章推荐
- [备忘]Win7 64位安装VS2010出现错误failed for component Microsoft Visual Studio 2010 64bit Prerequisites (x64)解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- [备忘]Win7 64位安装VS2010出现错误failed for component Microsoft Visual Studio 2010 64bit Prerequisites (x64)解决办法
- 解决vs2010出现一大堆链接错误的问题。
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- DirectShow 在VS2005/VS2010中环境配置和编译运行出现 winnt.h(5940)错误问题的解决
- ASP在XP环境下经常出现的【不能打开注册表关键字】错误解决办法
- 64位Windows7环境下,Eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- win7 64位系统使用VS2010生成时出现中文目录乱码问题的解决方法【转】
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- 出现“基础链接已关闭,无法链接到远程服务器"错误的解决办法
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- 64位系统安装了32位的MySQL后出现的error LNK2019错误解决方法
- 在VS2010中Ajax的AsyncFileUpload控件出现错误的解决
- VC6中链接access数据库时出现数据被截断的错误解决办法
- VS2010升级VS2013后,出现未定义类型“PowerPacks.ShapeContainer”错误解决方法
- VS2010在64位系统中连接64位Oracle出现的问题和解决方法