【问题标题】:compile ffmpeg with android ndk r5b使用 android ndk r5b 编译 ffmpeg
【发布时间】:2011-07-09 10:08:08
【问题描述】:

使用 android ndk r5b 编译 ffmpeg。

ffmpeg 0.6.1

安卓 ndk r5b

cygwin 1.7

构建参考网址:http://www.cnblogs.com/scottwong/archive/2010/12/17/1909455.html

但是,ffmpeg ./configure 结果错误! (在 config.err 文件下面)

check_cc
BEGIN /tmp/ffconf.GlDiY1P8.c
    1   int main(void){ return 0; }
END /tmp/ffconf.GlDiY1P8.c
/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gcc -fPIC -DANDROID -c -o /tmp/ffconf.1kQLpGaU.o /tmp/ffconf.GlDiY1P8.c
arm-eabi-gcc.exe: /tmp/ffconf.GlDiY1P8.c: No such file or directory

arm-eabi-gcc.exe: no input files

C compiler test failed.

所以,我只是尝试测试代码。

// test.c code
int main(){
  return 0;
}

/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gcc -fPIC -DANDROID -c -o ./test.o ./test.c

好的!!!!没问题。

但是, cp ./test.c /tmp(复制到/tmp)

/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-gcc -fPIC -DANDROID -c -o ./test.o /tmp/test.c

arm-eabi-gcc.exe: /tmp/test.c: No such file or directory
arm-eabi-gcc.exe: no input files

失败!!! 区别只是文件路径。 /tmp 目录存在,权限正确。 /home/test.c 是相同的结果。

怎么了?

【问题讨论】:

  • 您成功解决了上述问题吗?如果是这样,您能分享一下解决方案吗?

标签: android ffmpeg configure android-ndk


【解决方案1】:

如果你还没有解决这个问题,查看ffmpeg目录下config.log的最后一部分;很可能是路径或 CC 参数问题。

【讨论】:

    【解决方案2】:

    我也无法让它工作,我遇到了完全相同的问题。但是我能够使用“android-ndk-r4”进行编译。目前我不确定是什么导致了问题,但如果我有时间弄清楚它,我也会发布。

    所以目前的解决方法是使用 ndk r4。

    【讨论】:

    • 您在使用 ndk-r4 时如何提及路径?
    【解决方案3】:

    我在使用 r6 时遇到了完全相同的问题。我已经用 r4 尝试了 Lambage 的建议,但仍然无法让它发挥作用。

    我一直在研究这个问题,我想我已经找到了原因。

    1)configure正在调用android交叉编译器,它是一个windows .exe文件。

    2) 它通过使用 unix 文件命名约定的 cygwin 调用它。例如 /cygdrive/c/directory 而不是 C:\directory

    3)它在 android NDK 工具链文档中说交叉编译器不接受 cygwin 样式文件路径(来源:NDK/docs/STANDALONE_TOOLCHAIN.html):


    5.1/Windows 支持:

    Windows 二进制文件依赖于 Cygwin。好消息是他们 因此速度更快,坏消息是他们不了解 Cygwin 路径规范,例如 /cygdrive/c/foo/bar(而不是 C:/foo/bar)。


    我仍在尝试找到一种方法来做到这一点。如果我解决了,我会回来编辑这篇文章...待定

    【讨论】:

      【解决方案4】:

      我设法使用 NDK R6、cygwin 构建了它。确实,它不支持 /cydrive/ 路径,直接使用windows之类的路径即可;下面的例子:

      NDK=e:/AndroidSDK/NDK6
      PLATFORM=$NDK/platforms/android-9/arch-arm/
      PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows
      

      【讨论】:

      • 可以分享一下你用来构建ffmpeg的config.sh文件吗?
      【解决方案5】:

      我很难让它在 Windows 中运行,但最终我设法做到了! 以前的帖子是正确的 - Cygwin 路径和 Windows 路径存在问题。 我首先尝试了上面帖子中描述的解决方案,但它不起作用。最后我明白了原因:即使您将 Windows 路径放入 build_android.sh 文件,FFmpeg 的配置仍然包含错误的路径。

      所以在我的情况下,我已经部分更改了 FFmpeg 根目录中的配置文件:

      #set temporary file name
      : ${TMPDIR:=$TEMPDIR} 
      : ${TMPDIR:=$TMP}
      : ${TMPDIR:=/tmp}
      

      到这里:

      # set temporary file name
      #: ${TMPDIR:=$TEMPDIR}
      #: ${TMPDIR:=$TMP}
      : ${TMPDIR:=D:/InstallTools/Android/Cygwin_Root/tmp}
      

      在这之后,我得到了它的编译。

      【讨论】:

      • ffmpeg 中没有配置文件。你的意思是配置?
      • 我正在执行 ./build_android.sh 然后它给我错误消息“权限被拒绝”我做了什么错误。
      【解决方案6】:

      您没有设置 tmp 目录。您可以在 /etc/profile 中设置它,也可以使用 export TMPDIR=/your/tmp/directory 在终端中设置它。 注意: 1.如果你用cygwin编译,目录必须像D:/tmp。你不能使用 /cygdrive/d/tmp。 2. 必须有文件夹的权限。

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 1970-01-01
        • 2013-12-10
        • 2017-11-22
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 2012-12-21
        • 2014-10-18
        相关资源
        最近更新 更多