2015-11-11 68 views
1

enter image description here背景。我在另一臺計算機上運行了我的程序的發行版本,並立即收到一條消息,「找不到Your_DLL.dll或它的一個依賴項」。我相信我已經跟蹤到這個事實,「Your_DLL.dll」使用MSVCR120D.DLL。我使用Dependency Walker(Depends.exe)進行了檢查。在我的原始計算機上,一切都很好,因爲我擁有完整的Visual Studio(2013),並且存在MSVCR120D.DLL。但是,它不在另一臺機器上,也不應該是MSVCR120.DLL的Debug版本。我拉我的頭髮試圖找出我的項目中的「Your_DLL」我正在使用MSVCR120D.DLL或在發佈版本下有任何調試設置。在整個目錄中搜索MSVCR120D.DLL什麼都沒有。當然,也許在發佈版本的設置中有某種方式利用調試DLL,然後調用這個調試DLL。有人能給我一個線索在哪裏尋找問題?Visual C++/Visual Studio設置。什麼叫MSVCR120D.DLL

謝謝,

戴夫

+0

當您將活動構建配置設置爲Release時,構建配置管理器會說什麼? – cup

+0

杯,感謝您回來如此迅速。我試圖展示一張照片來展示它的內容。標題是「配置管理器」。如果Acitve解決方案配置爲發行版,則活動解決方案平臺爲x64,且相關dll顯示爲配置「發行版」和平臺x64 – Dave

+0

您正在運行64位版本還是32位版本?如果存在32位配置,請檢查32位配置所說的內容 – cup

回答

0

謝謝你所有的答案。我們發現了這個問題,我必須承認我是造成它的人! 「Your_DLL.dll」在Debug和Release中構建得很好。問題是我是如何從另一個DLL使用它的。另一個dll是一個C#項目,在參考文獻中,我添加了「Your_DLL.dll」。不幸的是,我把「複製本地」設置爲「真」。根據公司政策,我們將所有內容構建到中央位置C:\ bin \ debug或C:\ bin \ release。此外,根據公司政策,當我們添加引用時,我們選擇調試版本(您必須選擇一個!),但確保將「複製本地」設置爲FALSE。因此,當我們的構建腳本構建時,它會正確構建「Your_DLL.dll」,並將發行版放在C:\ bin \ release中。但是,當CSharp.dll隨後生成時,它會在C:\ bin \ release中放入一個調試版本的「Your_DLL.dll」。當我們看到Your_DLL.dll的版本在c:\ bin \ debug和c:\ bin \ release中的大小相同時,我們終於注意到了這個問題。

我一直對我們處理參考文獻的方式感到沉悶。也許有更好的辦法?但這可能是整個其他堆棧溢出問題。

我希望這可以幫助未來的人。 謝謝, Dave

1

一個運行時庫的風味在編譯器開關/ M指定...

對於動態鏈接的CRT,它應該是/MD用於發佈配置,並且/MDd用於調試。我會檢查,首先,通過觀察:

項目屬性 - >配置屬性 - > C/C++ - >代碼生成 - >運行時庫

[添加] 的depends工具有一個 「簡介」 命令(Profile - > Start Profiling),您可以在其中查看動態加載的DLL的運行時信息。希望這會指出你的罪犯。

+0

謝謝。我檢查,它確實是/ MD(不是/ MDd)。任何其他地方檢查? – Dave

+0

@Dave - 如果你正在拉其他dll - 你必須檢查它們。 –

+0

是的,所有其他dll似乎都設置爲/ MD。通過運行Matlab編譯器創建了一些靜態鏈接的庫。有沒有辦法告訴如果一個.lib是依賴於調試的東西?當我打開一個.lib文件時,Depends.exe似乎發出尖銳的聲音。謝謝 – Dave