init_cheap: VirtualAlloc pointer is null, Win32 error 487

用mingw編譯程序時報錯:
0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487 AllocationBase 0x0, BaseAddress 0x71690000, RegionSize 0x410000, State 0x10000  C:\MSYS-TEMP\bin\sh.exe: *** Couldn't reserve space for cygwin's heap,  Win32 error 6
原因是用到的msys-1.0.dll基地址衝突,需要rebase。雖然在win7下mingw編譯c++程序也可以用windows命令來操作文件,但是因爲項目中有幾個qt工程,自動生成的makefile需要msys來模擬linux環境操作文件。所以msys還是不能繞過。
解決方案:在命令行窗體鍵入:rebase -b 0x30000000 path/msys/1.0/bin/msys-1.0.dll
上述用到的rebase工具在visual studio和cygwin中都有,任選一個安裝即可。上述path是msys所在的路徑。
根據http://support.code-red-tech.com/CodeRedWiki/VirtualAllocPointerNull中的描述,上述操作若解決問題,則並不保證問題不會重現,這依賴於系統中同時運行的其它程序。若再出現則需要再次rebase到其它地址。
根據http://cygwin.wikia.com/wiki/Rebaseall中的描述,此問題在64位的cygwin中應該不存在。
上述問題並不會影響最終編譯生成的目標程序,因爲msys-1.0.dll只是makefile用來操作文件,並沒有作爲動態庫鏈接到目標程序中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章