交叉编译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.

请问,那位有解决的经验和方法,请指教!
...全文
1687 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汇编

内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

23,223

社区成员

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

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