今天編譯一個QT工程(QT版本:qt-win-opensource-4.8.4-vs2008),編譯成功,但老是運行出錯,如下所示:
QT卸了又裝,都沒用,網上找資料,各種說法有,有說中木馬的,路徑錯的,軟件沖突的,都試了一遍,沒有。
網上查了N多方法,總結一下,大概有兩種:
(一)qtcore4.dll編譯生成時除了問題。
參考下邊一篇博客,http://www.xjtudll.cn/Exp/62/,下了個dll關聯dll查看器,查看結果如下,原來是QTcore4.dll依賴項卻少,網上下載了MSVCP90.DLL和MSVCR90.DLL。原來如此。
(二)不同版本dll數據,path設置時產生干涉。(本文作者出現類型即該種問題)
可以參考如下博文:http://www.cnblogs.com/loongfee/archive/2011/11/30/2268701.html
最近在學習Code::Blocks(CB),感覺CB很強大很開放,尤其是它的純插件式的框架,非常贊。
但是從VS到CB的轉型實在是痛苦的,在VS下面沒有問題的程序,放到CB中編譯就不能通過。。。
另外,要使用CB+MinGW進行開發還需要將開發中用到的開源庫都用MinGW編譯好,wxWidgets、GDAL、Qt、Ossim……
網上的教程不少,但多是轉來轉去的,其實就是那一兩個版本,說起來都很順利,按照他們提供的步驟去編譯卻總是遇到一些奇怪的問題,很不好解決。
好在Qt官方網站提供了MinGW版本,直接安裝就行了。這里說說在CB+MinGW環境下使用Qt的方法以及遇到的問題。
這里默認Code::Blocks+MinGW的環境已經配置好。
1、首先在http://qt.nokia.com/downloads/windows-cpp網站上下載Qt的MinGW庫(300M+),安裝。
相應的VS2008版本可以從http://qt.nokia.com/downloads/windows-cpp-vs2008 下載,比較惡心的是這兩個版本的庫不能安裝在同一個目錄下面。所以我就將MinGW版本的庫安裝在了C:\Qt\4.7.4\MinGW下。
(之前安裝過Qt SDK完全版(1.6G),裝完5G+,居然不包含MinGW版本的庫。。。)
2、然后在“我的電腦→屬性→高級系統設置→高級→環境變量”中設置環境變量。
編輯PATH,添加”C:\Qt\4.7.4\MinGW\bin”,添加的位置要靠前一點,不然可能會被排在前面的其他版本的Qt庫所覆蓋。我就是被這個問題困擾了好幾天,在安裝完MinGW版本的Qt庫后,在Code::Blocks中新建了一個Qt4的工程,然后Build and Run,總是提示“無法定位程序輸入點qUnregisterResourceData@@YA_NHPBE00@Z於動態鏈接庫 QtCore4.dll”的錯誤,雖然知道是dll庫的問題,但是始終沒查出問題具體出在哪。最后發現時因為之前裝過OSGeo4W,其中包含了Qt庫,而OSGeo4W\bin目錄在PATH中比較靠前,於是后面安裝的MinGW版本的Qt庫一直處於被忽略的狀態。將”C:\Qt\4.7.4\MinGW\bin”放到它前面就OK了。
綜上,在大量測試DLL程序是,直接在環境變量里設置path添加dll路徑,可能會產生問題。關於DLL如何在VC中調用問題,參見如下博文:
http://www.cnblogs.com/vranger/archive/2013/01/14/2860141.html