转载: 找不到MSVCR90.dll、Debug vs Release及cppLapack相关

本文介绍了解决程序在Debug模式下因缺少MSVCR90D.dll而导致无法运行的问题,并探讨了Debug与Release模式的区别,以及cppLapack库的使用和编译经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天调试程序时出现了,找不到MSCVR90.dll的错误,最好查找到了解决办法,原文链接如下:
 
 
最近使用 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运行库,安装,问题依旧。快要疯了。继续google+baidu,功夫不负有心人,终于让我找到了答案,现记录在此,供参考。

  1. 1.         在“属性”->“C/C++”->“代码生成”->“运行时库”里面设为“多线程DLL”。
  2. 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: 
语法错误 : 标识符“A” 
c:\cpplapack\cpplapack\include\dgematrix-\dgematrix-misc.hpp(165) : error C2440: 
“=” : 
无法从“double **(__cdecl *)(void) ”转换为“double ** ” 
没有使该转换得以执行的上下文

 

这只是其中两个,其它错误类似。原始代码未经修改怎么会出错?怎么办?还好,作者给了我们原因及解决办法: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' 
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)

 

转载于:https://www.cnblogs.com/thefirstfeeling/p/5725372.html

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值