2011-05-12 47 views
0

我對這個概念有點新,並且在運行時加載庫時遇到一些問題。在我使用的開發機器上,庫看起來被正確加載,並且程序將始終正確運行,但是當我編譯該程序並將其移動到具有所需DLL的另一臺計算機時,它們無法加載。我認爲這種情況發生的主要原因是因爲未加載的DLL位於系統某處的某個文件夾(如C:\ windows \ system32),而這在大多數其他計算機上並不存在。將DLL鏈接到C++程序中QTCreator

我的問題是,如果我提供了一個需要的功能的自定義DLL並將其與程序一起發貨,我如何才能使它在QTCreator中正確鏈接?我已經嘗試了-l和-L標誌(例如:-llibname -LC:\ path \ to \ where \ dll \ will \ be)的組合,但是這似乎也沒有做到這一點。另一個令人驚訝的事情(無論如何)是,即使程序運行需要DLL,程序仍能成功啓動其他計算機。

如果有人有任何建議或教程,我可以閱讀關於此,我將非常感激。

回答

0

首先,您應該閱讀how Windows finds DLLs以加載它們。其次,一旦你知道這個過程是如何工作的,你可以考慮將你的DLL與你的應用程序一起運輸,以便在其他機器上運行時問題消失。如果他們是第三方DLL,您應該檢查您是否有權這樣做。

第三,Windows dependency walker tool在診斷運行時DLL負載問題方面非常出色。只需加載一個.exe並點擊F7開始分析。它會顯示你的應用程序加載的所有DLL和從哪裏。

最後,我不知道QTCreator但我想,所有你需要做的是通過它的.lib文件與正確的開關(和this link表明-L是正確的開關,FWIW)。