我有一個Windows屏幕保護程序,我想使用QT庫進行重新編譯,以便我可以提供更多的平臺。 我在Vista和XP上部署時遇到問題。如何構建不依賴於MSVCx80.dll的QTcore4.dll?
我用MT靜態編譯我的屏保,然後運行依賴檢查器。 結果如下:
MyScreensaver.SCR需要多個DLLS,QTCORE4.DLL但不包含MSVCx80.DLL。 到目前爲止這很好。
我的問題是,QTCORE4.DLL在其輪到,確實需要MSVCP80.DLL和MSVCR80.DLL 因此,我的應用程序不能在Vista系統上運行。
我可以建立QTCORE4.DLL以靜態鏈接微軟庫(也許是Libcmt.lib?),以便我在MS CRT DLL中沒有任何依賴關係嗎?
限制:
我不希望有用戶安裝MS VC再發行。屏幕保護程序只有1 MB,並且要求用戶在電腦上進行如此多的更改只是爲了屏保。
我不想使用這個技巧將MS CRT dll與屏幕保護程序放在同一個應用程序路徑中,因爲屏幕保護程序安裝在system32中,並且我想在其中安裝最小可能的文件。
最後,我寧願產生單片方案,而那一堆的DLL
我試圖QT的一個完整的靜態編譯和鏈接,但是這是不允許的(如果我理解正確的,由在LGPL),並且也沒有根據該建議:http://www.qtsoftware.com/developer/faqs/why-does-a-statically-built-qt-use-the-dynamic-visual-studio-runtime-libraries-do-i-need-to-deploy-those-with-my-application
試圖在各個方向的解決方案後,似乎最可行的一個是使用QTCore4.dll和QTGui4.dll,但讓他們靜態鏈接到MSVCRT。這樣,我的程序和QT DLL都不會依賴MSVCRT dll。
有沒有解決方案? (我是新來QT編程)
謝謝 邁克爾
更新: 我已經建立QT靜態,我已經包含在鏈接的QTcore.lib與/ MT建立我applitation也靜態。 我現在看到屏幕保護程序依賴於MSVCR80.DLL,很可能是因爲QT(QTcore.lib)的靜態構建也取決於它。 MSVCR80.DLL對我來說是一個障礙,因爲正如我上面所說的,我無法在XP和Vista上進行部署。 所以,現在的問題是: 是否有任何方式來建立一個QT應用程序而不依賴於MSVCR80.DLL? 感謝您的幫助 Michael – Mike 2009-07-08 18:11:51