使用 SWIG 時遇到“Assertion Failed”——問題原因與解決方法
阿新 • • 發佈:2022-03-06
目錄
使用 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 替換掉官網釋出的檔案。
★ 持續學習 ★ 堅持創作 ★