關於VC出現 0x0C150002 錯誤的原因以及解決方案

情景重現
        2013年7月29日,我在Windows 7 x86 SP1中文專業版系統環境下使用Visual Studio 2005 SP1中文版編寫應用程序。

        編寫完成後在Windows 7 x64 英文旗艦版系統環境下運行。
        悲劇的事情粗現了!程序在啓動的時候彈出了 0x0c150002 的錯誤提示。起初我並不知道是什麼原因,根據以往的經驗應該是編譯出了問題。於是我將所有的dll與exe都用MT編譯選項編譯成了靜態的模塊。
        結果運行時還是悲劇。
        接下來查看Windows系統日誌,發現程序運行時出現了SideBySide錯誤。




        這裏簡單的介紹一下VC庫的鏈接原理:
        每一個VC庫分爲CRT、ATL、MFC等等,微軟稱之爲“程序集”。通常情況下我們使用的是CRT庫。那麼CRT庫其實也是有版本之分的。
        以VC2005來看,它的CRT庫分別有8.0.50727.42、8.0.50727.762、8.0.50727.1833、8.0.50727.4027、8.0.50727.4053、8.0.50727.4927、8.0.50727.4940、8.0.50727.6159這幾個版本。
        我們在實際的編譯鏈接過程中VS會根據當前版本來決定使用哪一個,具體原理我還沒有摸清楚,但估計是使用當前相匹配的程序集的最高版本進行鏈接。

        那麼這個程序在拿到其他計算機運行時,計算機根據其清單中的程序集版本尋找相應的庫進行匹配,如果找不到就會反饋0x0c150002的SideBySide錯誤。



        當我發現這個問題的時候,以爲是我編譯選項出錯了。而事實上,這個東西與靜態編譯選項什麼的無關。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章