一個win64專案,debug模式下快寫完了,今早來編譯一個release版本,每個單元編譯通過,最后鏈接的時候,彈出一個錯誤:
Out of memory,code2
網上一番查找,心都涼了。。。。
參考官方網站的說明,注意,這個說明是放在 10.4.2里面的,也就是說,即便是目前的最新版本,也會存在這個問題:
64-bit Windows C++ Application with a FireDAC Component Might Raise Error
The following error is raised when attempting to compile an application using a single FireDAC component, when the platform is Windows x64 with static linking:
c:\program files (x86)\embarcadero\studio\<n.n>\Bin\CodeGear.Cpp.Targets : warning : Warning: Out of memory
c:\program files (x86)\embarcadero\studio\<n.n>\Bin\CodeGear.Cpp.Targets(2751,5): error MSB6006: "ilink32" exited with code 2.
The workaround is not to link FireDAC statically in Win64 C++ apps.
意思就是,如果你的win64專案,使用了FireDAC組件,那么編譯為靜態Release版本的時候,就絕對會彈出這個錯誤,官方也給出了解決方案:The workaround is not to link FireDAC statically in Win64 C++ apps.
意思就是:變通的方法,是將程式編譯成非靜態的。。。。這不是等于沒說。。。
于是搞了半天,最終編譯了一個版本,帶了很多BPL和DLL檔案,具體如下:

有沒有更好的辦法,能少點依賴檔案??這還是沒有使用任何第三方控制元件的情況下。。。
uj5u.com熱心網友回復:
The workaround is not to link FireDAC statically in Win64 C++ apps.這句話我理解錯了么?
怎么才能 not to link FireDAC statically in Win64 C++ apps???
就算發布的時候,少點BPL和DLL也好啊。。
uj5u.com熱心網友回復:
RTL之類的都可以靜態鏈接, 只把FIREDAC*使用runtime packages即可uj5u.com熱心網友回復:
我在IDE里是這么設定的啊,可后來為什么多出來那么多的BPL和DLL。。。uj5u.com熱心網友回復:
options->packages->runtime packages,runtime package import libraries里可以指定運行時包,不需要·的去掉uj5u.com熱心網友回復:
又試了一下,已經精簡到最少了,但是程式的依賴項和我一樓發的那些BPL和DLL,一個都不能少。。。設定如圖:

我醉了。。。。
uj5u.com熱心網友回復:
有沒有東西替代FireDAC??UniDAC??
uj5u.com熱心網友回復:
你看一下工程目錄下與工程同名的.pdi檔案,是一個文本檔案,里面列出來實際依賴的運行時包。前面我說的“RTL之類的都可以靜態鏈接”有問題,只要用到了運行時包,RTL就不能靜態鏈接(設定了也無效),但是沒有直接或者間接用到的運行時包是不需要的uj5u.com熱心網友回復:
debug配置下靜態鏈接會如何?uj5u.com熱心網友回復:
這樣的話,應該只會依賴我一樓截圖中的兩個DLL檔案,但是程式運行速度會慢一點,然后因為EXE檔案包含有DEBUG資訊,所以不太安全
uj5u.com熱心網友回復:
我看了,.PDI檔案不在工程目錄下,在Release目錄下,和我一樓列出的依賴項相比,少了兩個DLL和兩個BPL檔案,但是我無論怎么設定,編譯以后都需要他們。。。
uj5u.com熱心網友回復:
我想知道debug版和release版的exe分別多大?uj5u.com熱心網友回復:
我的理解:debug版本的,包含除錯資訊,沒有經過release那樣的優化,運行速度上差一點。雖然我這個專案對運行速度不算太敏感。但是在有些專案上,兩種模式的速度差異還是有點大的,具體可以百度。第二就是debug版本的exe中,包含了除錯資訊,這個東西對于代碼有保密要求的專案就不太安全了。最后,debug版本的即便是取消勾選了RTL和runtime package,發布的時候,還是要帶上我一樓中的兩個dll。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268576.html
標籤:基礎類
上一篇:不知道為什么運行不出結果?
下一篇:關于回呼函式如何呼叫
