can't find a register in class `GENERAL_REGS' while reloading `asm'
如果出现以下错误
cabac.h: In function `get_cabac_noinline':
cabac.h:525: error: can't find a register in class `GENERAL_REGS' while reloading `asm'
make[1]: *** [h264.o] 错误 1
在make前加入
export CFLAGS=-fomit-frame-pointer
make clean
之前因為想找出 ass 字幕爛掉的原因,得編譯一個 debug 版本的 mplayer。但只要一加入這個選項後編譯就會爛掉,會跑出如下的錯誤訊息:
can’t find a register in class ‘GENERAL_REGS’ while reloading ‘asm’
當時也沒仔細去找解法,直接用插入 printf 的方法來觀察一些變數,問題也順利解決了。不過昨天把 svn head 抓下來編譯後也是一樣,看來應該是老問題了,查了一下 maillist 發現有人問過,可以參考這幾封信:
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-November/047222.html
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-November/047221.html
解決方法是在 libavcodec/Makefile 的 CFLAGS 加入 -fomit-frame-pointer 參數就好。編譯完果然變得超級肥大…看起來是可以用 gdb 來跑了:
88M mplayer
6.9M mplayer-strip
這問題好像留了好幾年還找不到解決方法,不過在 FAQ 中是把問題推給 gcc,所以在 gcc 的 ml 上也發現有人問過類似的 問 題….