Android 的 FFmpeg 交叉编译因 x86_64 的 C 编译器测试失败
FFmpeg cross compile for Android fails with on C compiler test for x86_64
我正在尝试使用 NDK r16b 为 Android 交叉编译 FFmpeg
我已经为所有平台编译没有任何问题,但 x86_64.
这是我的编译脚本
#!/bin/bash
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--enable-pic \
--enable-small \
--disable-programs \
--disable-symver \
--target-os=android \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--sysroot=$TOOLCHAIN/sysroot $ADDITIONAL_CONFIG_FLAG \
--disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-protocol=file --enable-protocol=pipe --enable-protocol=concat \
--disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-avcodec --enable-avformat --enable-swresample --enable-avfilter --enable-filter=aresample \
--enable-parser=aac --enable-parser=aac_latm --enable-parser=flac --enable-parser=mpegaudio --enable-parser=vorbis \
--enable-muxer=mp3,wav --enable-encoder=pcm*,libmp3lame --enable-nonfree --enable-gpl \
--enable-jni --enable-mediacodec --enable-libmp3lame
make -j4
make install
make distclean
}
HOME_PATH=/home/nll/Desktop
CPU=x86_64
TOOLCHAIN=$HOME_PATH/my_toolchains/x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
mkdir -p $(pwd)/android/$CPU
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-march=x86-64 -I$INCLUDE_PATH"
ADDI_LDFLAGS="-shared -L$LIBS_PATH"
ADDITIONAL_CONFIG_FLAG="--arch=x86_64 --enable-x86asm"
build_one
以上脚本失败
WARNING: /home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-pkg-config not found, library detection may fail.
mktemp -u XXXXXX
5ZpQya
test_ld cc
test_cc
BEGIN /tmp/ffconf.KWqViHoN/test.c
1 int main(void){ return 0; }
END /tmp/ffconf.KWqViHoN/test.c
/home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-gcc --sysroot=/home/nll/Desktop/my_toolchains/x86_64/sysroot -Os -fpic -march=x86-64 -I -c -o /tmp/ffconf.KWqViHoN/test.o /tmp/ffconf.KWqViHoN/test.c
/home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-gcc -shared -L --sysroot=/home/nll/Desktop/my_toolchains/x86_64/sysroot -o /tmp/ffconf.KWqViHoN/test /tmp/ffconf.KWqViHoN/test.o
/home/nll/Desktop/my_toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin/ld: error: /tmp/ffconf.KWqViHoN/test.o: unsupported ELF file type 2
collect2: error: ld returned 1 exit status
C compiler test failed.
因此,错误是 "unsupported ELF file type 2",这意味着 64 位。但是,无论如何我都在尝试构建 64 位库。
我不明白这是什么问题。谁能给我一些指导?
第一个命令行包含-I -c
。这意味着目录-c
被添加到include路径中,命令执行了一个完整的link,而不仅仅是编译和汇编。结果是一个可执行文件,它是一个 ET_EXEC
对象(类型 2),因此是最终的错误消息。 (这与 64 位二进制文件无关。)
设置包含路径时出错。
我正在尝试使用 NDK r16b 为 Android 交叉编译 FFmpeg 我已经为所有平台编译没有任何问题,但 x86_64.
这是我的编译脚本
#!/bin/bash
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--enable-pic \
--enable-small \
--disable-programs \
--disable-symver \
--target-os=android \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--sysroot=$TOOLCHAIN/sysroot $ADDITIONAL_CONFIG_FLAG \
--disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-protocol=file --enable-protocol=pipe --enable-protocol=concat \
--disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-avcodec --enable-avformat --enable-swresample --enable-avfilter --enable-filter=aresample \
--enable-parser=aac --enable-parser=aac_latm --enable-parser=flac --enable-parser=mpegaudio --enable-parser=vorbis \
--enable-muxer=mp3,wav --enable-encoder=pcm*,libmp3lame --enable-nonfree --enable-gpl \
--enable-jni --enable-mediacodec --enable-libmp3lame
make -j4
make install
make distclean
}
HOME_PATH=/home/nll/Desktop
CPU=x86_64
TOOLCHAIN=$HOME_PATH/my_toolchains/x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
mkdir -p $(pwd)/android/$CPU
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-march=x86-64 -I$INCLUDE_PATH"
ADDI_LDFLAGS="-shared -L$LIBS_PATH"
ADDITIONAL_CONFIG_FLAG="--arch=x86_64 --enable-x86asm"
build_one
以上脚本失败
WARNING: /home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-pkg-config not found, library detection may fail.
mktemp -u XXXXXX
5ZpQya
test_ld cc
test_cc
BEGIN /tmp/ffconf.KWqViHoN/test.c
1 int main(void){ return 0; }
END /tmp/ffconf.KWqViHoN/test.c
/home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-gcc --sysroot=/home/nll/Desktop/my_toolchains/x86_64/sysroot -Os -fpic -march=x86-64 -I -c -o /tmp/ffconf.KWqViHoN/test.o /tmp/ffconf.KWqViHoN/test.c
/home/nll/Desktop/my_toolchains/x86_64/bin/x86_64-linux-android-gcc -shared -L --sysroot=/home/nll/Desktop/my_toolchains/x86_64/sysroot -o /tmp/ffconf.KWqViHoN/test /tmp/ffconf.KWqViHoN/test.o
/home/nll/Desktop/my_toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin/ld: error: /tmp/ffconf.KWqViHoN/test.o: unsupported ELF file type 2
collect2: error: ld returned 1 exit status
C compiler test failed.
因此,错误是 "unsupported ELF file type 2",这意味着 64 位。但是,无论如何我都在尝试构建 64 位库。
我不明白这是什么问题。谁能给我一些指导?
第一个命令行包含-I -c
。这意味着目录-c
被添加到include路径中,命令执行了一个完整的link,而不仅仅是编译和汇编。结果是一个可执行文件,它是一个 ET_EXEC
对象(类型 2),因此是最终的错误消息。 (这与 64 位二进制文件无关。)
设置包含路径时出错。