转载: 找不到MSVCR90.dll、Debug vs Release及cppLapack相关
式下也能编译通过,但一运行就弹出一个对话框,提示没有找到MSVCR90D.dll,程序未能启
动,而如果把该DLL拷贝到系统目录或当前目录下,又会出现另一问题,提示说Debug Error,我都疯掉了,程序是示例程序,没有错的,但究竟哪里错了呢?
图2:更多的错误
图4:解决方法之二
于是百度之,首先找到一个答案说这是Visual Studio 2008安装在FAT32分区下的bug,转换为NTFS就行了,但这显然不是我想要的,因为我的硬盘全都是NTFS的;于是继续google,找到一篇文章,,说是要在配置里忽略掉MSVCRT库,我试了一下问题依旧;继续google,这回找到MSDN上了,MSDN说是没有安装VC运行库,于是我又从microsoft上下回来VC运行库,安装,问题依旧。快要疯了。继续google+baidu,功夫不负有心人,终于让我找到了答案,现记录在此,供参考。
- 1. 在“属性”->“C/C++”->“代码生成”->“运行时库”里面设为“多线程DLL”。
- 2. 在程序里添加这一行奇怪的代码:
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
由以上表现可知问题出在Debug模式里,又搜索了Debug与Release模式的区别,得到的答案是:
实际上,"Debug"和"Release"只是两套IDE预先设定好的编译参数和宏定义组合(例如我们经常遇到的_DEBUG和NDEBUG宏)。编译 器并不知道Debug和Release之分(不过MD和MDd编译参数会区分Debug版本和Release版本的运行时库)。当混用用Debug设置编译的程序和Release版本的运行时库的时候,由于它们生成的时候使用的是两套不同的编译选项,因此非常可能互不兼容。 |
另外,STL在Debug与Release模式下性能有较大的差异,所以测试STL是最好在Release模式下。
再说一说cppLapack,由于最近要做矩阵运算所以使用了这个东西。它是一个小日本写的,封装了lapack(著名的线性代数库,这个大家都知道了吧)一些常用的函数,注意是常用而不是全部。lapack性能虽然没得说,但接口不是很友好,使用起来有些不方便。cppLapack是sourceforge上的一个开源项目,主页为http://cpplapack.sourceforge.net/ ,它的接口比较好用,性能也还不错,还独有“Smart-Temporary”系统以最小化临时变量(实际上是一些数组)的复制,其实就是尽量重复使用内存以提高效率。但它数据类型有限,而且限制只能为double,不能使用float,矩阵功能也有限,只能解决一些基本的线性代数问题,如转置、矩阵乘积、求逆、解线性方程等,要是拿来做共轭梯度就不行了(这要靠Intel MKL,有空再说)。
前面说了一大堆cpplapack,但如何使用还是一个尚未解决的问题,一个好的库如果编译不了再好也没用,是吧?我曾从网上下过很多源码,但很少有拿来就能编译成功的(是不是有同感?),cpplapack也不例外。看看都会出现什么error吧:
c:\cpplapack\cpplapack\include\dgematrix-\dgematrix-misc.hpp(163) : error C2061: |
这只是其中两个,其它错误类似。原始代码未经修改怎么会出错?怎么办?还好,作者给了我们原因及解决办法:http://sourceforge.net/forum/forum.php?thread_id=1374927&forum_id=267868
>d:\cpplapack\include\dgematrix-\dgematrix-misc.hpp(163):error C2061: syntax error: 'A' Change the "swap" functions in "*-misc.hpp" like the following. double** A_darray(A.Darray); |
就是说这是VC7的bug,看来问题不在我们,不在代码,当然也不在作者,而在微软,谁让微软的C++编译器对标准C++的支持就那么差劲呢(STL是另外一个著名的例子,比如模板的偏特化,还有一个例子是友元函数),著名的、风靡一时、拥有无数用户的VC6.0对标准C++的支持仅有83.43%(gcc是96.15%,差距啊),到了VC7,据说到了98.22%,不知是不是噱头,但就cpplapack的编译看来似乎……
言归正传,继续说cpplapack的编译,既然有错,就要改。方法是将“-misc.hpp”文件里的 double** A_darray(A.Darray); 改为 double** A_darray=A.Darray; 不错,官方答案就是可靠,OK,编译通过。
cpplapack还有一点让人不爽的地方:它的文档全部是html文件,是由doxygen自动生成的,使用起来还不错,只是这些文件太多了,又小又多,占用大量磁盘空间,造成大量磁盘碎片,在我的电脑里有13M之多,于是QuickCHM一下,这回好多了,只有1.52M,方便存储方便查看。其实chm文件还是有很多优点的,很老实的说。
最后,cpplapack需要blas和clapack库,需要另外下载。我将修改后的源代码、编译后的CHM帮助文件以及这两个库打包打包放在了网上,有需要的可以直接下,省去一堆麻烦,最重要的是那种面对一堆compile error时的郁闷无与助。此cpplapack是2005_03_25版本。点此下载(3.5M)
转载: 找不到MSVCR90.dll、Debug vs Release及cppLapack相关的更多相关文章
- MinGW 使用 msvcr90.dll
MinGW 编译出来的程序总是使用 VC6 的 msvcrt.dll ,VC8,9,10有很多新的API(仅限于c runtime),想使用怎么办? 比如:boost 对 MinGW 最低要求就是 m ...
- 找不到Qt5Cored.dll(Release和Debug版连接了不同的库)
Qt5Cored.dll和Qt5Core.dll文件分别用于Qt软件的Debug版和Release版. 通常会有两个Qt5Core.dll文件,分别位于Qti安装目录下的“Qt5.1.0\5.1.0\ ...
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
---转载:http://hi.baidu.com/liu_haitao/item/e2157ac3a3c32a0bc610b253 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90 ...
- C++中debug和release的区别 . 转载
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- debug和release转载
Debug和Release区别 转自草原和大树 VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下 ...
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
发布日期:2009.12.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码 ...
- [转载]解析WINDOWS中的DLL文件---经典DLL解读
[转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...
- OpenNMS在安装”我找不到jrrd.dll“错误的解决方法
在Windows 2003 Server(虚拟机)安装OpenNMS.找不到jrrd.dll错误.尝试从学习OpenNMS官网下载jrrd-1.0.7.tar.gz,我们没有发现标dll文件,编译需要 ...
- Win7 64有点找不到MSVCP71.DLL和MSVCR71.dll
现象: win7启动好多程序都报找不到MSVCP71.DLL,网页上不去,可是非常奇怪的是好像在线给系统打补丁没有受到不论什么影响,能正常打补丁. 解决: 从本机搜索了一下msvcp71.dll ...
随机推荐
- nmon安装和使用介绍
使用参考地址:百度中搜索 nmon 博客园 使用文档参考地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Documentation nmmon地址:h ...
- HDU 3377 Plan (插头DP,变形)
题意:有一个n*m的矩阵,每个格子中有一个值(可能负值),要从左上角走到右下角,求路径的最大花费. 思路: 除了起点和终点外,其他的点可以走,也可以不走. (2)我用的是括号表示法,所以起始状态为') ...
- labview密码忘记怎么办,如何破解labview密码,vi密码md5码破解重置
labview密码忘记了或者需要破解labview密码,可以找到vi文件的md5码,把里面的md5码拿到网站http://cmd5.la解密就可以了. 把vi文件的32位md5码放到网站cmd5.la ...
- 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)
打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...
- SVN中的check out与export的区别
http://blog.csdn.net/zndxlxm/article/details/7763116 check out跟check in对应,export跟import对应. check out ...
- 005 String s = "Hello";s = s + " world!";执行这两行代码执行后,原始的 String 对象中的内容到底变了没有?
原始的String对象中的内容没有改变成“Hello world”. 1.原因 因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的.第一句代码中,s(存储在栈 ...
- graphviz layer 教程(非布局)
官方 pdf 上讲解的很少,没有图片. http://www.graphviz.org/wiki/how-use-drawing-layers-overlays 这里有图片,但是又没有说如何生成. 直 ...
- Django模型中字段属性choice的使用
根据Django官方文档: from django.db import models class Student(models.Model): FRESHMAN = 'FR' SOPHOMORE = ...
- 我的Python分析成长之路3
一 集合 ...
- strcat strcpy 源代码,用指针去实现
15. 指针实现 strcmp函数 • int newStrcpy(char *p, char *q) • { • while(*p ==*q) { ...