2011-05-11 99 views
6

我們假設我的程序需要幾個DLL來工作。我應該在我的發行版中將該DLL提供給用戶。現在我需要QtCore4.DLL,QtGui4.DLL,msvcp90.DLL,msvcr90.DLL,mylib.DLL,Kernel32.DLL ...CMake:如何確定需要可執行文件的所有.DLL/.SO文件?

如果CMake可以獲得完整的DLL列表(或.SO)文件。然後,我會從該列表中刪除諸如「Kernel32.DLL」之類的項目,並將這些DLL複製到我的發行版中。

我不能保證下一個版本將在相同版本的Visual Studio上完成,因此硬編碼路徑如「C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ redist \ x86 \ Microsoft」。 VC90.CRT「或」E:\ Qt \ 4.6.3「不適合搜索DLL。

謝謝!

回答

1

您可以在Windows(或Visual Studio的cmd-line dumpbin工具)上使用Dependency Walker。然而,這不是真正的CMake解決方案,並且Cmake沒有真正的標準解決方案。

但是,有InstallRequiredSystemLibraries模塊,您可以使用它獲取msvc和mingw10.dll與mingw的系統dll(msvc [r | p] 90.dll)。

1

正如Andre所建議的,InstallRequiredSystemLibraries用於查找/安裝正確的C/C++運行時。還有BundleUtilities可用於查找應用程序,庫和/或插件的其他依賴關係。

它永遠不會像運行時加載的插件一樣挑選事物,但可以將它們與應該使用的庫目錄一起添加。在最新版本的CMake中,爲了使BundleUtilities在所有平臺上更可靠,我們做了一些改進。

相關問題