ubuntu编译--ffmpeg--android

开始尝试ndk-r16、ndk-r17 发现解决一个错误,后面接着错误。最终还是选择了 ndk-r15,仅需要解决下面的 r15c问题3: ,解决了就编译过了

包的准备

ndk包 (下载老版本的-我这边下载的是r15,因为新版本的arm-linux-androideabi-gcc被裁剪掉了):

https://developer.android.google.cn/ndk/downloads/older_releases

ffmpeg源码:

http://ffmpeg.org/download.html

配置并开始编译

r17c报错

TOOLCHAIN:/usr/ndk/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
/usr/ndk/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-clang is unable to create an executable file.
C compiler test failed.

解决方法:

	--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
	--extra-cflags="-Os -fpic $ADDI_CFLAGS" \

同时也要确认 /usr/ndk/android-ndk-r15c/toolchains 路径是否正确

r16b报错2

.9.x/include/stdint.h:9:26: fatal error: stdint.h: No such file or directory
 # include_next <stdint.h>

解决方法:

	在 --extra-cflags= 配置增加 -isysroot $NDK/sysroot  就好了
	--extra-cflags= "... -isysroot $NDK/sysroot" \

r15c问题3:

ibavformat/udp.c:296:28: error: request for member 's_addr' in something not a structure or union
     mreqs.imr_multiaddr.s_addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;

解决方法:

然后修改 udp.c 中struct ip_mreq_source mreqs; 为struct my_ip_mreq_source mreqs;
 udp.c 
        // struct ip_mreq_source mreqs;
    	struct my_ip_mreq_source mreqs;
 ip.h
		struct my_ip_mreq_source
		  {
		    /* IP multicast address of group.  */
		    struct in_addr imr_multiaddr;
		
		    /* IP address of interface.  */
		    struct in_addr imr_interface;
		
		    /* IP address of source.  */
		    struct in_addr imr_sourceaddr;
		  };

编译配置文件

#!/bin/bash
export NDK=/usr/ndk/android-ndk-r15c
export SYSROOT=$NDK/platforms/android-19/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
echo "$TOOLCHAIN/bin/arm-linux-androideabi-"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--enable-protocol=concat \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean all
make -j3
make install
}
sed -i '' 's/HAVE_STRUCT_IP_MREQ_SOURCE 1/HAVE_STRUCT_IP_MREQ_SOURCE 0/g' config.h
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

configure的修改

这是也是参考别的地方的,不过也记录下吧

# SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
# LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
# SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
# SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(SLIBNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

猜你喜欢

转载自blog.csdn.net/LHshooter/article/details/107518400