解决relese不能编译的问题.docx_第1页
解决relese不能编译的问题.docx_第2页
解决relese不能编译的问题.docx_第3页
解决relese不能编译的问题.docx_第4页
解决relese不能编译的问题.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

窗体顶端用户名: 密码: 登录 窗体底端注册 结冰的雪非淡薄无以明志, 非宁静无以致远主页博客相册|个人档案 |好友 查看文章【原创】找不到MSVCR90.dll、Debug vs Release及cppLapack相关2009年03月16日 星期一 上午 02:07关键词:找不到MSVCR90.dll Debug Release cpplapack 最近使用cppLapack,nmake运行正常,在Release模式下也编译运行正常,在Debug模式下也能编译通过,但一运行就弹出一个对话框,提示没有找到MSVCR90D.dll,程序未能启动,而如果把该DLL拷贝到系统目录或当前目录下,又会出现另一问题,提示说Debug Error,我都疯掉了,程序是示例程序,没有错的,但究竟哪里错了呢? 图1: 找不到MSVCR90.dll图2:更多的错误 图3:解决方法之一图4:解决方法之二 于是百度之,首先找到一个答案说这是Visual Studio 2008安装在FAT32分区下的bug,转换为NTFS就行了,但这显然不是我想要的,因为我的硬盘全都是NTFS的;于是继续google,找到一篇文章,说是要在配置里忽略掉MSVCRT库,我试了一下问题依旧;继续google,这回找到MSDN上了,MSDN说是没有安装VC运行库,于是我又从microsoft上下回来VC运行库,安装,问题依旧。快要疯了。继续googlebaidu,功夫不负有心人,终于让我找到了答案,现记录在此,供参考。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上的一个开源项目,主页为 / ,它的接口比较好用,性能也还不错,还独有“Smart-Temporary”系统以最小化临时变量(实际上是一些数组)的复制,其实就是尽量重复使用内存以提高效率。但它数据类型有限,而且限制只能为double,不能使用float,矩阵功能也有限,只能解决一些基本的线性代数问题,如转置、矩阵乘积、求逆、解线性方程等,要是拿来做共轭梯度就不行了(这要靠Intel MKL,有空再说)。 前面说了一大堆cpplapack,但如何使用还是一个尚未解决的问题,一个好的库如果编译不了再好也没用,是吧?我曾从网上下过很多源码,但很少有拿来就能编译成功的(是不是有同感?),cpplapack也不例外。看看都会出现什么error吧:c:cpplapackcpplapackincludedgematrix-dgematrix-misc.hpp(163) : error C2061: 语法错误 : 标识符“A” c:cpplapackcpplapackincludedgematrix-dgematrix-misc.hpp(165) : error C2440: “=” : 无法从“double *(_cdecl *)(void) ”转换为“double * ” 没有使该转换得以执行的上下文这只是其中两个,其它错误类似。原始代码未经修改怎么会出错?怎么办?还好,作者给了我们原因及解决办法:/forum/forum.php?thread_id=1374927&forum_id=267868d:cpplapackincludedgematrix-dgematrix-misc.hpp(163):error C2061: syntax error: A This is because of the bug of VC7. However, you can compile CPPLapack programs with a few slight modifications. Change the swap functions in *-misc.hpp like the following. double* A_darray(A.Darray); = 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)/files/62c15f28-118b-11de-8714-0014221b798a/类别:程序 | | 添加到搜藏 | 分享到i贴吧 | 浏览(2735) | 评论(4) 上一篇:【原创】C# 添加引用问题下一篇:【原创】MSN聊天窗口被Esc键意外.相关文章:Debug和Release区别Debug 和 Release 编译方式的本.关于release版本和Debug 版本的.如何生成debug和release的dll库C# 项目中的 bin 目录和 obj 目.VS 下 debug 和 release你必须知道的.NET第三十五回,.vs debug release 的区别VC.NET中DEBUG和RELEASE版本差异.VC+如何单步调试程序?如何使用V.更多最近读者:登录后,您就出现在这里。闻风而动者彼岸霓影zzr_naturehevenuehuangchunkuangjguo586kivy20060714549103897网友评论:1kyewong2009年11月30日 星期一 下午 10:28 | 回复 楼主您好可否把你改进了的cpplapack发我邮箱一份?那个rayfile的链接死活下不下来。多谢了!2frankyhit2009年12月30日 星期三 上午 09:52 | 回复 good 3网友:匿名网友2010年02月19日 星期五 上午 00:55 | 回复 问题解决,用上了那个PARAM选项后,奇怪的问题 4jimmyxtf2010年04月25日 星期日 下午 10:29 | 回复 谢谢博主,按照你的方法,加上了那个#pragma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论