2013-02-28 29 views
3

這是我昨天發佈的this question的一種後續行爲。我的問題是關於哪些運行時C++庫鏈接。我使用Qt作爲框架,爲我的IDE使用QtCreator。根據digia文檔here,Qt在使用/MT標誌(使您的應用程序針對靜態運行時庫運行)構建時已知存在內存問題。不過,我在這個應用程序中也使用了第三方驅動程序,該應用程序中的文檔特別聲明,除非您鏈接到靜態運行時庫,否則它不會生成。果然,它編譯與/MT國旗罰款,但給我約40個鏈接器錯誤,當我刪除該設置。 (到目前爲止,我只是從驅動程序的靜態庫中包含一個頭文件)/MT和/ MD都需要時該怎麼辦?

所以我的問題是:在這裏做什麼是正確的事情?有沒有辦法強制驅動程序期望動態運行時庫?或者我應該忍受Qt的內存管理問題?或者有沒有辦法讓Qt鏈接與動態鏈接和驅動程序(以及它需要的Boost的部分)進行鏈接? (並且請記住,我在QtCreator中這樣做,而不是在Studio中)

+0

是的,我花了幾分鐘思考,想出了什麼都沒有。如果QT維護者會修正他們的錯誤,那將會很好。也許你可以找到一些內存管理是一個問題的具體實例,看看你是否可以避免它們?我不知道QT,這是不安全的,但如果你構建QT是一組動態庫,它可以工作......除非你做一些事情,比如將你的靜態版本的'malloc'分配的指針傳遞給QT ,它轉過來並用錯誤的'free'釋放它。這加上一百萬其他可能的問題.... – 2013-02-28 05:32:43

回答

1

/MT/MD都是鏈接器選項。如果您正在構建多個模塊,則可以有多個選項。

在這種情況下,請使用/MD作爲Qt和您自己的代碼。用非依賴於CRT的API將驅動程序封裝在它自己的DLL中,並將該DLL與/MT鏈接起來。使用COM可能是一個選項。這當然不是CRT依賴的,但它可能是矯枉過正的。

相關問題