1. 程式人生 > 其它 >使用 SWIG 時遇到“Assertion Failed”——問題原因與解決方法

使用 SWIG 時遇到“Assertion Failed”——問題原因與解決方法

目錄

使用 SWIG 時遇到 “Assertion Failed”——問題原因與解決方法

問題

近日在 Windows(64 bit) 上使用 swig 時總是遇到“Assertion Failed”。不僅是我,另一位使用者也遇到了同樣的麻煩

追蹤報錯來源發現,swig 在函式 realloc 失敗之後直接以“斷言”的形式處理失敗,這才造成了“Assertion Failed”。

究其根源,從官網上下載的 swig.exe 是 32 位的,而在 64 位作業系統上,一個 32 位 exe 能處理的記憶體有上限——

通常不超過 2Gb。當工程規模擴大之後,swig 生成的 C++ 程式碼可能超過上百萬行,在此期間需要佔用大量記憶體,要求太多記憶體會導致函式 realloc 失敗。

解決

swig 的維護人員已經開始處理記憶體的問題,相信在新版本可以得到解決。

此外,還有一個“土”辦法——用 swig 的原始碼重新編譯一個 64 位的 exe 替換掉官網釋出的檔案。

★ 持續學習 ★ 堅持創作 ★