回答
這是(特別是在Windows上)的一個常見問題。安裝Qt SDK時,至少會得到2個具有相同名稱但不同版本的.dll。它發生了,你鏈接到預期的(dev-)庫,但在運行時使用Designer/Creator的版本。
避免這種情況的最簡單方法是將正確版本的dll與您的二進制文件(.exe和東西)一起部署到單獨的文件夾中。這可以通過修改您的構建腳本來實現。它取決於你的構建系統,通常是qmake/.pro或cmake/CMakeLists.txt。
至於CMake的,假定有一個包含路徑文件的環境變量MYQTDLLDIR
被部署,您可以使用類似的東西:
configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
文檔從cmake --help-full
剝離:
configure_file複製文件到另一個位置並修改其內容 。
configure_file( [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
複製一個文件到文件並替換在文件內容引用的變量 值。如果是相對路徑 ,則會針對當前源目錄進行評估。 必須是文件,而不是目錄。如果是 相對路徑,則會根據當前二進制文件 目錄對其進行評估。如果命名現有目錄,輸入文件 將以其原始名稱放置在該目錄中。
該命令將用CMake所確定的值替換輸入文件中引用爲 $ {VAR}或@ VAR @的任何變量。如果未定義變量
,則它將被替換爲無。如果指定了
COPYONLY,則不會發生可變擴展。如果指定了 ESCAPE_QUOTES,則任何替代引號都將被C風格 轉義。該文件將使用CMake 變量的當前值進行配置。如果指定了@ONLY,則只會替換@ VAR @
格式的變量,並且$ {VAR}將被忽略。這對於配置使用$ {VAR}的腳本的
很有用。取決於CMake中VAR的設置,任何#cmakedefine VAR都將被#define VAR或/ * #undef VAR */
取代。
#cmakedefine01 VAR的任何事件將與任何的#define VAR 1或 的#define VAR代替0>根據VAR是否計算爲TRUE或FALSE在 CMake的
至於QMAKE你可以使用INSTALLS
(當調用make install
時使用)或者在鏈接後執行「普通命令」。使用INSTALLS:
mytarget.path = /output/path
mytarget.files += /path/to/QtCore4.dll
mytarget.files += /path/to/QtGui4.dll
INSTALLS += mytarget
QMAKE使用命令執行:
win32 {
EXTRA_BINFILES += \
$${MYQTDLLDIR}/QtCore4.dll \
$${MYQTDLLDIR}/QtGui4.dll
EXTRA_BINFILES_WIN = $${EXTRA_BINFILES}
EXTRA_BINFILES_WIN ~= s,/,\\,g
DESTDIR_WIN = $${DESTDIR}
DESTDIR_WIN ~= s,/,\\,g
for(FILE,EXTRA_BINFILES_WIN){
QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\n\t))
}
}
這看起來像我正在建立對一個版本的Qt和在運行時與另一個版本鏈接。運行QtSDK維護工具並刪除不需要的任何版本的Qt Desktop。然後,您可能需要在正確的標題處重新指定Codeblocks。
我在猜測,如果你從Codeblocks內部運行,你必須明確指定在你運行新建的應用程序時使用哪個dll。如果是這樣,請確保它們是正確的版本(即用QT INSTALL DIR \ Desktop \ 4.7.x \ mingw \ bin替換它們[雖然我現在不在我的工作PC上,所以這條路徑可能會有點不對勁,只要確保你在正確的4.7.x文件夾中])。
說實話,如果你從Windows上運行,爲什麼不使用QtCreator?除了GDB集成方面略有不足之外,這很不錯,你會發現這樣的問題很難找到。
謝謝,我用qtcreator的GUI設計和Qt特定代碼,並在CB業務邏輯。爲什麼?很少有理由,其中之一是我非常喜歡cb,並且不想停止使用它。 – smallB
- 1. 代碼塊16.01找不到標頭
- 2. 帶代碼塊的Qt - 對vtable的undefined參考
- 3. 的#define _UNICODE不使用MinGW +代碼塊
- 4. QT是否使用託管代碼?
- 5. 代碼塊使用{}在bash
- 6. 使用剃刀代碼塊
- 7. 在頭部內容和鏈接標記中使用代碼塊
- 8. 使用代碼::塊IDE
- 9. 返回到代碼塊的開頭?
- 10. 使用Ruby + Qt完成代碼
- 11. 使用Qt組件編譯C++代碼
- 12. Qt代碼解析
- 13. 組織的QT代碼
- 14. Asp.Net代碼塊 - 如何使用屬性
- 15. 編碼使用代碼塊在linux
- 16. 無法使用的代碼塊
- 17. 不能建立在代碼塊代碼
- 18. 代碼塊不運行的代碼
- 19. 碼頭不使用緩存
- 20. C++:代碼::塊不認得包含的頭
- 21. 代碼塊不會識別它寫入的類的頭部?
- 22. 使「不安全」代碼塊「安全」
- 23. 模塊之間(火花和碼頭)不兼容使用maven
- 24. 對不起,不能用代碼封裝代碼對象。同樣
- 25. ASP.NET MVC:在C#代碼塊中使用@
- 26. Qt在LGPL下:如何分發對Qt源代碼的更改?
- 27. 從代碼內編譯QT源代碼
- 28. dev.domain.com使用subversion頭部代碼?
- 29. 使用碼頭代理身份驗證
- 30. 使用Yii1啓用模塊的代碼
你會介意並詳細說明你提到的這個構建腳本。聽起來很有趣。 – smallB
@smallB更新了我的答案 – mbx