專案期間,軟體在開發機器上執行流暢,但一旦到公共機,來不及啟動介面就crash了,於是動用了depends,將缺失的dll等等都加上去,還是crash,於是乎,火了,難道是引用了一些debug版的dll?於是乎,把開發環境也裝上,還是crash,在木有頭緒的時候,注意到depends下面提示到的一些資訊,關於開源庫dll出現error的情況,做了乙個簡單的測試,將出現error的dll拷貝到我機器上,木有報錯,於是問題應該是這些dll呼叫了不同版本的系統dll,導致出錯了。
沿著這條線路,加上群友點撥,終於追到manifest這個東東。關於manifest的介紹,請看下面的文章
除非,你的程式是靜態鏈結的,沒有使用dll,只使用了作業系統核心的
kernel32.dll,
user32.dll, ole32.dll, 或shdocvw.dll 等
project的設定必須是use standard windows libraries、not using atl、no common language runtime support
那麼你可以不需要考慮manifest
可以關掉它
vs2005中menifest相關的設定:
project/properties/linker/manifest
file/generate manifest 決定是否生成manifest,如上情況才可以關閉
project/properties/linker/manifest
file/allow isolation 這個是設定dll的呼叫的,並不能決定manifest是否還是必須的
project/properties/manifest tool/input and output/embed manifest 決定manifest是個單獨的檔案還是嵌入到exe內的資源
2。問題:問題的產生是因為從vc6的工程到vs2005的移植,正是因為上述原因而可能出現以下鏈結錯誤:
1>linking...
1>cvtres : fatal error cvt1100: duplicate resource. type:manifest, name:1,
language:0x0409
1>link : fatal error lnk1123: failure during conversion to coff: file
invalid or corrupt
解決辦法是:開啟rc檔案,找manifest,所屬段或行全去掉
看完這篇文章後,我就納悶了,因為載入的dll是開源專案中的,所以只能給系統打補丁,增加相關的dll和manifest檔案,於是乎,開啟萬能的ultraedit,將乙個dll拖進去,翻了翻,終於出現如下幾行,如獲至寶:
有dependency這樣的關鍵字,再將microsoft.vc80.crt
問題如下:
vc7.1~vc9.0都有這樣的問題,這是微軟搞出來的,名義上說是為了解決dll hell問題,對dll的依賴,不單單是檢測檔名\函式或類入口,還檢測menifest,而我所引用的dll是vs2008編譯的,所以它遵循這個規則。ps,以後還是要自己找開源**來編譯,這個比較靠譜。
在作業系統,有個winsxs目錄,裡面的menifest和profix指定dll的相關版本在**,然後,你的執行程式,有乙個menifest,
你的menifest指定的版本,要在那裡面去找,匹配了,並且指定的目錄有這個dll,才能載入,而我把dll放在執行目錄,沒有manifest這個中介是沒用的,
上面是vc80.crt中版本8.0.50727.4053,publickeytoken是1fc8b3b9a1e18e3b的,在下面的**終於找到了補丁,問題解決,good
x86的控制暫存器CR0,CR1,CR2,CR3
狀態和控制暫存器組除了eflags eip 還有四個32位的控制暫存器,它們是cr0,cr1,cr2和cr3。這幾個暫存器中儲存全域性性和任務無關的機器狀態。cr0中包含了6個預定義標誌,0位是保護允許位pe protedted enable 用於啟動保護模式,如果pe位置1,則保護模式啟動,如果p...
關於spring message標籤引起的問題
最近在做專案,在用spring message標籤做資源國際化的時候,碰到個詭異的問題,著實讓人頭疼一陣。在js 中,嵌入使用spring message標籤做訊息提醒的時候,在中文環境下,一點問題沒有,但一切換到英文環境,出現js錯誤。在chrome瀏覽器中除錯,出現 uncaught synta...
離線快取 manifest 的設定
雖然 manifest 已經從web標準中移除,但是還是來看看manifest的實現吧 這個需要伺服器的支援,也就是需要設定mime,我在本地的wamp 環境下進行設定的,對應的是第四個,也就是下面最後乙個 addtype text cache manifest manifest 伺服器上可以支援之...