交叉编译ffmpeg出错,为什么ARM下要用到汇编啊?

lxglxt 2010-08-31 03:27:42
想要把ffmpeg移植到arm中,因此在linux下进行交叉编译,但是出现以下问题:
1。首先
./configure \
--enable-cross-compile \
--arch=armv6 \
--target-os=linux \
--cross-prefix=/usr/local/arm/4.4.1/bin/arm-none-linux-gnueabi- \
--cc=gcc \
--enable-gpl \
--enable-shared
这个可以产生config.mak和config.h文件。
但make时,出现错误:
./libavutil/arm/bswap.h: Assembler messages:
./libavutil/arm/bswap.h:61: Error: no such instruction: `eor %ecx,%esi,%esi,ror'
./libavutil/arm/bswap.h:62: Error: no such instruction: `bic %ecx,%ecx,'
./libavutil/arm/bswap.h:63: Error: suffix or operands invalid for `mov'

也就是说,无法编译这些汇编代码了,于是改为:
./configure \
--enable-cross-compile \
--arch=armv6 \
--target-os=linux \
--cross-prefix=/usr/local/arm/s5pv210/arm-2009q3/bin/arm-none-linux-gnueabi- \
--cc=gcc \
--as=as \
--enable-gpl \
--enable-shared
增加了一行,结果直接报错:
GNU assembler not found, install gas-preprocessor

If you think configure made a mistake, make sure you are using the latest
version from SVN. If the latest version fails, report the problem to the
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solving the problem.

请问,那位有解决的经验和方法,请指教!
...全文
1383 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
maikforever 2011-09-07
  • 打赏
  • 举报
回复
楼主是怎么解决的。可以使用 NEON 吗。?http://topic.csdn.net/u/20110907/14/8adcf899-f9c4-4786-8ad0-a449c316d28c.html?47912
lxglxt 2010-10-14
  • 打赏
  • 举报
回复
最近把这个问题绕过去了。
ffmpeg移植到android中成功,用的是ndk。
现在可以播放视频了。但还要解决一些细节功能,如快进快退,标签等。
lxglxt 2010-09-01
  • 打赏
  • 举报
回复
楼上的,多谢了。
我的arm-linux-gcc版本是4.4.1,旧的版本也试验过3.4.1,4.3.2。
我的是ffmpeg-0.6

arch选项应该起作用了,部分汇编编译通过了。
--arch=arm我也试验过,后来察看源码,里面最新的是armv6。

--cc=gcc \
--as=as \
虽然看起来不是交叉编译,但加上前缀
--cross-prefix=/usr/local/arm/s5pv210/arm-2009q3/bin/arm-none-linux-gnueabi- \
就是交叉编译了,只是写法不同。

--cross-prefix=/usr/local/arm/s5pv210/arm-2009q3/bin/ \
--cc=arm-none-linux-gnueabi-gcc \
--as=arm-none-linux-gnueabi-as \
我同样试验过,同样的.

我之前参照了你推荐这个帖子。摘录如下:
这里使用./configure --cpu=armv4 --cross-prefix=arm-linux- --cc=arm-linux-gcc --host-cc=gcc --enable-cross-compile --enable-static --disable-optimizations --disable-mmx --disable-iwmmxt --disable-altivec --disable-vhook --disable-ffserver --enable-ffplay --disable-mmx2 --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-armvfp --arch=arm --target-path=output

--enable-cross-compile使能交叉编译后,必须指出arch和OS,这是configure出现的提示。所以从语法上就是错误的。
我试验也是没有通过。
deep_pro 2010-09-01
  • 打赏
  • 举报
回复
那些是x86的汇编
说明你的arch选项没起作用
我用的--arch=arm 通过

同时你的--cc=gcc \
--as=as \
根本不是交叉编译嘛

http://hi.baidu.com/deep_pro/blog/item/197f7d442e57d388b3b7dc75.html
louyong0571 2010-09-01
  • 打赏
  • 举报
回复
是不是arm的汇编指令不一样啊?
deep_pro 2010-09-01
  • 打赏
  • 举报
回复
我觉得这个./libavutil/arm/bswap.h:62: Error: no such instruction: `bic %ecx,%ecx,'
太他妈的诡异了,arm的文件夹下,出现了x86特有的寄存器
请注意make distclean


可以再看看这些东西是哪个功能需要的,在configure 选项里disable掉

使用汇编是正常的,多媒体处理软件注重速度嘛,但是也应该用arm汇编

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧