转载: 找不到MSVCR90.dll、Debug vs Release及cppLapack相关
式下也能編譯通過,但一運(yùn)行就彈出一個(gè)對(duì)話框,提示沒有找到MSVCR90D.dll,程序未能啟
動(dòng),而如果把該DLL拷貝到系統(tǒng)目錄或當(dāng)前目錄下,又會(huì)出現(xiàn)另一問題,提示說Debug Error,我都瘋掉了,程序是示例程序,沒有錯(cuò)的,但究竟哪里錯(cuò)了呢?
?
圖1:?找不到MSVCR90.dll
?
?
?
圖2:更多的錯(cuò)誤?
?
?
?
圖3:解決方法之一圖4:解決方法之二
????????于是百度之,首先找到一個(gè)答案說這是Visual Studio 2008安裝在FAT32分區(qū)下的bug,轉(zhuǎn)換為NTFS就行了,但這顯然不是我想要的,因?yàn)槲业挠脖P全都是NTFS的;于是繼續(xù)google,找到一篇文章,,說是要在配置里忽略掉MSVCRT庫,我試了一下問題依舊;繼續(xù)google,這回找到MSDN上了,MSDN說是沒有安裝VC運(yùn)行庫,于是我又從microsoft上下回來VC運(yùn)行庫,安裝,問題依舊。快要瘋了。繼續(xù)google+baidu,功夫不負(fù)有心人,終于讓我找到了答案,現(xiàn)記錄在此,供參考。
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")
?
????由以上表現(xiàn)可知問題出在Debug模式里,又搜索了Debug與Release模式的區(qū)別,得到的答案是:
| 實(shí)際上,"Debug"和"Release"只是兩套IDE預(yù)先設(shè)定好的編譯參數(shù)和宏定義組合(例如我們經(jīng)常遇到的_DEBUG和NDEBUG宏)。編譯?器并不知道Debug和Release之分(不過MD和MDd編譯參數(shù)會(huì)區(qū)分Debug版本和Release版本的運(yùn)行時(shí)庫)。當(dāng)混用用Debug設(shè)置編譯的程序和Release版本的運(yùn)行時(shí)庫的時(shí)候,由于它們生成的時(shí)候使用的是兩套不同的編譯選項(xiàng),因此非常可能互不兼容。 |
?????????另外,STL在Debug與Release模式下性能有較大的差異,所以測(cè)試STL是最好在Release模式下。
?????????再說一說cppLapack,由于最近要做矩陣運(yùn)算所以使用了這個(gè)東西。它是一個(gè)小日本寫的,封裝了lapack(著名的線性代數(shù)庫,這個(gè)大家都知道了吧)一些常用的函數(shù),注意是常用而不是全部。lapack性能雖然沒得說,但接口不是很友好,使用起來有些不方便。cppLapack是sourceforge上的一個(gè)開源項(xiàng)目,主頁為http://cpplapack.sourceforge.net/?,它的接口比較好用,性能也還不錯(cuò),還獨(dú)有“Smart-Temporary”系統(tǒng)以最小化臨時(shí)變量(實(shí)際上是一些數(shù)組)的復(fù)制,其實(shí)就是盡量重復(fù)使用內(nèi)存以提高效率。但它數(shù)據(jù)類型有限,而且限制只能為double,不能使用float,矩陣功能也有限,只能解決一些基本的線性代數(shù)問題,如轉(zhuǎn)置、矩陣乘積、求逆、解線性方程等,要是拿來做共軛梯度就不行了(這要靠Intel MKL,有空再說)。
?????????前面說了一大堆cpplapack,但如何使用還是一個(gè)尚未解決的問題,一個(gè)好的庫如果編譯不了再好也沒用,是吧?我曾從網(wǎng)上下過很多源碼,但很少有拿來就能編譯成功的(是不是有同感?),cpplapack也不例外。看看都會(huì)出現(xiàn)什么error吧:
| c:\cpplapack\cpplapack\include\dgematrix-\dgematrix-misc.hpp(163) : error C2061:? |
?
這只是其中兩個(gè),其它錯(cuò)誤類似。原始代碼未經(jīng)修改怎么會(huì)出錯(cuò)?怎么辦?還好,作者給了我們?cè)蚣敖鉀Q辦法: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'? |
?
就是說這是VC7的bug,看來問題不在我們,不在代碼,當(dāng)然也不在作者,而在微軟,誰讓微軟的C++編譯器對(duì)標(biāo)準(zhǔn)C++的支持就那么差勁呢(STL是另外一個(gè)著名的例子,比如模板的偏特化,還有一個(gè)例子是友元函數(shù)),著名的、風(fēng)靡一時(shí)、擁有無數(shù)用戶的VC6.0對(duì)標(biāo)準(zhǔn)C++的支持僅有83.43%(gcc是96.15%,差距啊),到了VC7,據(jù)說到了98.22%,不知是不是噱頭,但就cpplapack的編譯看來似乎……
?????????言歸正傳,繼續(xù)說cpplapack的編譯,既然有錯(cuò),就要改。方法是將“-misc.hpp”文件里的?double** A_darray(A.Darray);?改為?double** A_darray=A.Darray;?不錯(cuò),官方答案就是可靠,OK,編譯通過。
?????????cpplapack還有一點(diǎn)讓人不爽的地方:它的文檔全部是html文件,是由doxygen自動(dòng)生成的,使用起來還不錯(cuò),只是這些文件太多了,又小又多,占用大量磁盤空間,造成大量磁盤碎片,在我的電腦里有13M之多,于是QuickCHM一下,這回好多了,只有1.52M,方便存儲(chǔ)方便查看。其實(shí)chm文件還是有很多優(yōu)點(diǎn)的,很老實(shí)的說。
?????????最后,cpplapack需要blas和clapack庫,需要另外下載。我將修改后的源代碼、編譯后的CHM幫助文件以及這兩個(gè)庫打包打包放在了網(wǎng)上,有需要的可以直接下,省去一堆麻煩,最重要的是那種面對(duì)一堆compile error時(shí)的郁悶無與助。此cpplapack是2005_03_25版本。點(diǎn)此下載(3.5M)
轉(zhuǎn)載于:https://www.cnblogs.com/thefirstfeeling/p/5725372.html
總結(jié)
以上是生活随笔為你收集整理的转载: 找不到MSVCR90.dll、Debug vs Release及cppLapack相关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++求泊松分布
- 下一篇: 第12届蓝桥杯 我的第一个比赛