失蹤

2016-01-11 61 views
-1

我一直失眠了這個現在幾天的Visual C運行時庫:失蹤

我使用SFML創建一個應用程序,一切都很好,直到我創建了一個新的項目幾天前。之後,當我試圖編譯使用SFML庫的解決方案時,我會得到鏈接器錯誤並丟失DLL文件。

我環顧四周,發現一個名爲dependency walker的程序,它查看程序依賴哪個DLL文件。顯然,我的程序可執行文件缺少一些DLL文件,這些文件應該在windows目錄中。

在發現它們都有前綴「CRT」,後綴爲「Nothing」或「D」,表示它們是Visual C運行庫DLL的前綴之前,我嚇壞了。

即使我沒有從我的電腦中丟失重要的DLL,我仍然需要解決這個問題。不,在問題出現之前,我的個人電腦沒有發生重大的硬件/軟件變更(我沒有防病毒軟件,只相信自己的膽量,我已經有5年沒有問題了),是的, m在tutorial之後正確設置SFML目錄。

我已經嘗試重新安裝和修復VS和我的版本的VS的可再分發VC(這是2012年贏得桌面快車),嘗試乾淨啓動,Windows自身文件檢查(SFC/SCANNOW),並嘗試手動放置DLL到我的目錄中,依賴walker說我錯過了。

有沒有其他人遇到過這個?你是如何解決它的?

*有趣的提示:我可以訪問我學校網絡上的管理員帳戶,並在那裏的計算機上安裝VS以查看問題是否會再次發生。由於這些機器上的Windows目錄永遠不會被修改VS執行正常。難道是我需要得到一個乾淨的Windows安裝?

+0

CRT問題可能是一個巨大的痛苦,我會提到我過去遇到的一個問題,以及我們如何解決它,以防萬一它適用於您。 由於第三方庫及其依賴關係,我們的應用程序在清單中有多個CRT條目。 Windows不喜歡這樣,它可能會導致問題,在這種情況下,它找到Windows目錄中的第三方CRT版本,並且只會在那之後查找CRT文件,並忽略我們在本地目錄中修補的CRT文件。 我們必須對清單進行外部化,清理它只有我們的CRT條目(單個條目),並檢查它以使其永久。 – Scott

+0

對不起,字數限制。我們花了幾天的時間試圖追蹤自己的問題,幾乎沒有關於這種行爲的文件。它可以在一些機器上運行,但不能在其他機器上運行,這一切都取決於那些機器已經修補到Windows的內容,以及它們是否具有我們需要的當前CRT(在構建時從Windows頭文件中提取)。由於缺少的DLL是CRT DLL,也許你有類似的問題? – Scott

+0

非常感謝Scott,我看着它,看到第三方DLL正在調用Windows DLL目錄中缺少的CRT DLL,我只需要替換它們即可。 – Lolechi

回答

0

我不知道OP是否允許回答自己的線程(或如果有時間限制),但這裏有雲:

我有一個冷靜的頭腦看着它後解決了我的問題。我重新檢查了我的SFML庫的版本,並不確定它們是64位還是32位,所以我重新下載了兼容的32位版本(因爲我的調試編譯器設置爲在32位上運行)與我的版本的VS.這改變了我從錯過MSVCP140D.dll到MSVCO120D.dll的錯誤(數字對應於體系結構)。

我搜索了一下/問了一會兒,發現我需要一個名爲MSVCR120D.dll的文件,該文件在system32中找到,但不在SysWoW64中。在放置相應的體系結構DLL文件(system32爲64位,SysWow64爲32位)後,終於奏效了!

即使依賴walker仍然說可執行文件缺少其他DLL文件,該項目仍然編譯並運行良好。

我希望這不是一個只適用於我的解決方案,我見過很多其他人都遇到同樣的問題。

+0

***這改變了我從錯過MSVCP140D.dll到MSVCO120D.dll的錯誤***這意味着您下載的原始二進制文件是爲Visual Studio 2015編譯的,而新的二進制文件是爲Visual Studio 2013編譯的。您不應該在Visual Studio 2012中使用Visual Studio 2013二進制文件。這會導致未定義的行爲(由於具有超過1個CRT和堆),即使它看起來可行。 – drescherjm

+0

是啊,我不知道它爲什麼會起作用,但我確定我下載了[Visual Studio 2012庫](http://www.sfml-dev.org/download/sfml/2.3.2/) – Lolechi

+0

你想要Visual C++ 11(2012)'庫。如果這些依賴於Visual Studio 2013,我會說需要在破損的包裝上提交錯誤報告。 – drescherjm