【FFMPEG】【ARM-Linux开发】arm上安装FFMPEG


交叉编译工具下载地址 :

https://launchpad.net/linaro-toolchain-binaries/+download

其中我下载的是 :

gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz(md5,sig) arm-Linux-gnueabihf crosscompiler for Linux


在CentOS 64 位环境下交叉编译 ffmpeg

./configure --sysroot=/home/arm_linux/arm-linux-gnueabihf/libc --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=/home/arm_linux/bin/arm-linux-gnueabihf-


提示如下错误:

arm-linux-gnueabihf/arm-linux-gnueabihf/bin/gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
C compiler test failed.


上面这个错误执行

[root@localhost ffmpeg-1.1.3]# yum install ld-linux.so.2

后解决。


然后继续configure , 又碰到下面的错误 :

[root@localhost ffmpeg-1.1.3]# /usr/routing/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc test.c
/usr/routing/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

这个错误后来换了 32 位的系统后解决。


编译完成后在目标机器上执行, 出错 :

[plain]view plaincopy
  1. root@cubieboard2:/home/linaro#lddffmpeg
  2. ./ffmpeg:/lib/arm-linux-gnueabihf/libc.so.6:version`GLIBC_2.17'notfound(requiredby./ffmpeg)
  3. libm.so.6=>/lib/arm-linux-gnueabihf/libm.so.6(0xb6ee2000)
  4. libpthread.so.0=>/lib/arm-linux-gnueabihf/libpthread.so.0(0xb6ec6000)
  5. libc.so.6=>/lib/arm-linux-gnueabihf/libc.so.6(0xb6de2000)
  6. /lib/ld-linux-armhf.so.3(0xb6f58000)

这个问题是因为交叉编译工具的 glibc库的版本和目标机器上的glibc库的版本不一致造成的,

解决办法就是静态链接 glibc库,执行下面的命令重新生成Mkaefile文件。

./configure --sysroot=/home/arm_linux/arm-linux-gnueabihf/libc --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=/home/arm_linux/bin/arm-linux-gnueabihf- --extra-libs=/home/arm_linux/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/libc.a

make

下来在目标机器上查看就正常了 :

[plain]view plaincopy
  1. root@cubieboard2:/home/linaro#lddffmpeg
  2. libm.so.6=>/lib/arm-linux-gnueabihf/libm.so.6(0xb6ec6000)
  3. libgcc_s.so.1=>/lib/arm-linux-gnueabihf/libgcc_s.so.1(0xb6ea3000)
  4. libpthread.so.0=>/lib/arm-linux-gnueabihf/libpthread.so.0(0xb6e88000)
  5. libc.so.6=>/lib/arm-linux-gnueabihf/libc.so.6(0xb6da4000)
  6. /lib/ld-linux-armhf.so.3(0xb6f3c000)

不过运行的时候出问题了 :

root@cubieboard2:/home/linaro# ./ffmpeg
unexpected reloc type in static binaryAborted

看来静态链接libc库不是个办法。。。


还有一招, 就是直接从目标机器里把 libc.so.6 和 librt.so.1 这两个库 复制到 交叉编译机器, 覆盖源文件, 然后再重新编译即可。


执行 ffmpeg , 现在可以执行了, 不过有丢包, 有编解码失败的情况 , PC上没问题:

[plain]view plaincopy
  1. [h264@0x15b80a0]RTP:missed28packets
  2. [h264@0x15b80a0]RTP:missed5packets
  3. [h264@0x15b80a0]errorwhiledecodingMB7537,bytestream(-10)
  4. [h264@0x15b80a0]concealing614DC,614AC,614MVerrorsinPframe
  5. RTP:missed3packets=17.1size=1062kBtime=00:00:41.48bitrate=209.7kbits/sdup=0drop=5
  6. [h264@0x15b80a0]RTP:missed6packets
  7. [h264@0x15b80a0]RTP:missed3packets
  8. Lastmessagerepeated1times
  9. [h264@0x15b80a0]RTP:missed6packets
  10. [h264@0x15b80a0]RTP:missed3packets
  11. [h264@0x15b80a0]RTP:missed6packets
  12. [h264@0x15b80a0]RTP:missed3packets
  13. [h264@0x15b80a0]RTP:missed6packets
  14. RTP:missed28packets17.1size=1062kBtime=00:00:41.48bitrate=209.7kbits/sdup=0drop=5
  15. [h264@0x15b80a0]errorwhiledecodingMB6134,bytestream(-5)
  16. [h264@0x15b80a0]concealing868DC,868AC,868MVerrorsinPframe
  17. [h264@0x15b80a0]RTP:missed25packets
  18. [h264@0x15b80a0]errorwhiledecodingMB4034,bytestream(-7)
  19. [h264@0x15b80a0]concealing889DC,889AC,889MVerrorsinPframe
  20. [h264@0x15b80a0]RTP:missed49packets
  21. [h264@0x15b80a0]errorwhiledecodingMB920,bytestream(-20)
优质内容筛选与推荐>>
1、EPSG、SRID、WKT的概念
2、关于IE记录Cookie的问题
3、Pytest---yield
4、Hive_Hive的数据模型_数据存储
5、JS - 最全


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn