2016-06-21 83 views
1

這是對this question (MSVCP140.dll missing)的補充。在VS中編譯程序,不需要任何外部運行時DLL

我想編譯一個Windows機器的程序。這裏需要注意的是我沒有在其上安裝軟件的權限,但我可以運行可執行文件。

每次我在有問題的Windows機器上運行它時,都會出現MSVCP140.dll問題。我跟着the solution of the question I have linked(這是靜態鏈接),對於一些非常奇怪的原因,我仍然得到錯誤(即使我知道這使得程序在得到相同錯誤時在同事計算機上運行)。

還有什麼我可以做的,這將使程序(缺乏更好的條款)完全可移植?我需要在VS中更改任何更多設置,以便將庫完全編譯爲可執行文件?

我將進一步強調事實我已經看到使用靜態鏈接使用/ MT選項進行編譯的解決方案,我仍然缺少.dll問題。

我試圖複製MSVCP140.dll旁邊我的可執行文件,它確實解決了這個問題,但還有另一個缺少.dll,我不能遞增地添加.dlls,直到程序開始工作。如果這是唯一的解決方案,我很高興將所有的.dll文件捆綁在一起,但是我想知道哪些是需要的,所以我不必在絕望的情況下複製整個system32文件夾。

+0

首先,你必須知道你的應用程序,然後你應該知道它的依賴關係,一個用LoadLibrary()加載的缺失依賴可能很難被發現,或者長時間被忽視。這就是說你可以用一個名爲DependencyWalker的小工具來檢查依賴關係。另外請注意,如果你靜態鏈接所有的C++ RT DLL,那麼它應該在每一臺機器上都能正常工作,所以應該有其他的東西在那裏丟失...... –

+0

@AdrianoRepetti相信我,我很困惑,爲什麼靜態鏈接是不工作。 – ZoSal

+0

您是否對依賴於MSVCP140的任何其他(部署)DLL有依賴性?您應該使用Dependency Walker探索您的依賴關係樹以獲得更好的概覽 –

回答

2

去使用dependency walker找出你需要什麼DLL,以及爲什麼你需要它們。這可能是啓發性的,並導致通過使用替代方法來切除許多依賴關係的路徑。如果你確定你沒有在消費者運行時導入某些函數(例如,你只是爲了調試目的而導入它們),那麼你可以選擇delay load它們。