cross compiler( toolchain ) ==> gcc-4.1.0 + glibc-2.3.2
第一次產生config檔,第二次正式make
執行以下命令,會產生 config.mak 檔案
./configure --enable-cross-compile
--cc=arm-linux-gcc
--cpu=armv4
--arch=arm
--enable-gpl
--enable-static
--disable-shared
--enable-small
--disable-parsers <不要去使用該參數,轉檔會錯誤>
--disable-debug
--disable-network
--disable-mmx
--disable-iwmmxt
--disable-altivec
--disable-vhook
--disable-ffserver
--disable-altivec
--disable-amd3dnow
--disable-amd3dnowext
--disable-mmx
--disable-mmx2
--disable-sse
--disable-ssse3
--disable-armv5te
--disable-armv6
--disable-armv6t2
--disable-armvfp
--disable-iwmmxt
--disable-mmi
--disable-neon
--disable-vis
--disable-yasm
這裡有修改一些檔案,因為在make的時候會發生一些asm指令找不到的問題。
diff -r ffmpeg-0.5/libavcodec/arm/asm.S ffmpeg_modify-0.5/libavcodec/arm/asm.S
24c24
< .eabi_attribute 24, \val
---
> @.eabi_attribute 24, \val
28c28
< .eabi_attribute 25, \val
---
> @.eabi_attribute 25, \val
diff -r ffmpeg-0.5/libavcodec/arm/dsputil_arm_s.S ffmpeg_modify-0.5/libavcodec/arm/dsputil_arm_s.S
641c641
< push {r4-r10}
---
> stmfd sp!, {r4-r10} @ push {r4-r10}
724c724
< pop {r4-r10}
---
> ldmfd sp!, {r4-r10} @ pop {r4-r10}
726c726
< pop {r4-r10}
---
> mov pc,lr @ bx lr
diff -r ffmpeg-0.5/libavcodec/arm/mpegvideo_armv5te_s.S ffmpeg_modify-0.5/libavcodec/arm/mpegvideo_armv5te_s.S
39c39
< push {r4-r9,lr}
---
> stmfd sp!, {r4-r9,lr} @ push {r4-r9,lr}
102c102
< pople {r4-r9,pc}
---
> ldmlefd sp!, {r4-r9,pc} @ pople {r4-r9,pc}
116c116
< pop {r4-r9,pc}
---
> ldmfd sp!, {r4-r9,pc} @ pop {r4-r9,pc}
若是用 gcc 4.0 以下的版本 make 編譯
時會出現錯誤訊息: 出現error : unrecognize option: -Wno-pointer-sign vim config.mak 刪除文字串 -Wno-pointer-sign ,再一次重新 make 編譯 .... 會產生 ffmpeg 可執行檔 |
最後一個步驟會看見 strip ffmpeg 失敗...
改用 arm-linux-strip ffmpeg 成功執行檔瘦身
ps:如何確認 ffmpeg 是由正確的 gcc版本編譯出來 ?
當你的 linux 主機有許多版本 toolchain時,常有機會使用到不正確的版本。
傳至實驗版,輸入 ./ffmpeg 可看到 built on Oct 30 2009 13:42:32, gcc: 4.1.0
測試轉檔:
./ffmpeg -i 2004-11-15-1.mpeg -f avi newmovie.avi
沒有留言:
張貼留言