![](/img/trans.png)
[英]Debugging a C++ program in NetBeans 8.0 which needs the sudo to run
[英]How do I determine which c++ redistributables my program needs to run?
是否有可能我需要為vs2012和vs2010安裝vcredist?
我剛剛遇到一個錯誤,我的應用程序無法加載.dll,並且在我進行了無關的安裝后突然開始工作,這促使我猜測它必須安裝了一個更老的vcredist來修復問題。 但是我確定我正在使用c ++ 11功能。
部署本身就是一項工作。 我討厭它,我討厭你在Windows上編寫安裝的方式。 ......所以現在感覺好多了......
你只需要一個vcredist。 鏈接器決定將您的程序鏈接到的那個。 如果您安裝了“Windows SDK”,您將在以下位置找到實際的redist:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86
如果您安裝所有更新,包括不重要的更新,Microsoft將更新該文件夾中的redist!
也許你有一個不想運行的可執行文件,你需要依賴walker 。 一個工具,非常有用,微軟必須從Visual Studio中刪除它。 下載程序並在其中打開您的exe。 你不需要了解真正發生的事情。 只要在打開過程中沒有出現Dialog,即使底部窗口中有感嘆號,一切也都可以。 如果對話框出現類似“無法解決”的內容而不是在底部窗口中查看。 通常現在在較低的窗口中有類似“msvcr.dll”或“msvcr100.dll”或“msvcr110.dll”的內容。 如果它在擴展名之前包含“d”,如“msvcr100d.dll”,則可執行文件在調試模式下編譯,您的旅程將在沒有安裝編譯器的系統上結束。 如果沒有,該名稱告訴您需要哪個vcredist:
msvcr100 = VS 2010 redist (32bit) (64bit)
msvcr110 = VS 2012 redist (32 / 64bit?)
有時它不是msvcr但它始終以“ms”開頭。 當然程序會告訴你每個缺少的dll,不僅僅是微軟和dll中的哪個命令被使用。 這有時非常有用。 您必須對可執行文件夾中的每個dll執行此操作,因為它們也可能具有不可解析的依賴項。
回到你的第一個問題。 您的程序只能鏈接到msvcr100或msvcr110,而不能同時鏈接到兩者,這就是每個可執行文件只需要一個vcredist的原因。 如評論中所述,第三方DLL可能會使用不同的msvcp版本。 所以,是的,你必須搜索你使用的所有DLL,你必須安裝兩個vcredist。
PS:總是至少有兩個,msvcr和msvcp。
我解決了這個問題如下(在Windows 7上):
依賴性walker對我沒有幫助(它只是通過報告不必要的依賴關系而混淆了我)。
如果你想知道需要哪些運行時,可以嘗試在github( https://github.com/lucasg/Dependencies )上使用lucasg中的“Dependencies”工具,該工具適用於像win10這樣的現代系統。
你只需要在依賴樹中查找MsVcR##.dll
o VcRuntime###.dll
(其中#代表一個數字)。
HTH
PS:我們多年來一直使用的老忠實的“依賴性步行者”似乎無法處理新的操作系統處理延遲依賴關系的方式,將它們標記為“缺失”,而它們不會丟失,只是延遲加載一種它不知道的方式......
如果您的操作系統是Vista或更高版本(不是XP),請使用內置的SxStrace.exe生成一個日志,其中包含正在加載的DLL以及需要它們的模塊。 它將清楚地顯示您是否正在加載多個CRT DLL版本,以及DLL(第三方或否)。
VS2012可再發行組件被放入,例如“C:\\ Program Files(x86)\\ Microsoft Visual Studio 11.0 \\ VC \\ redist”。
- 大衛
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.