第一条
网上挺多教程的,新手多看几篇学习流程,以及学习一下里面的编译脚本命令。
特别注意的是:ffmpeg保持一致、ndk保持一致。Ubuntu+Vmware没有特别要求。
不同版本的FFmpeg跟不同的ndk有很多组合,尽量不要自己随便去组合,减少不必要的错误。
第二条
网上很多教程中的编译脚本整体结构差不多,但是有很多坑。每个作者的变量命名可能不一样,然后版本不一样,变量的赋值也不一样。
所以千万不要自己随便去修改,不要把这个作者的脚本跟另外作者的脚本进行混合。要先查找资料,理解变量的意义。
第一条和第二天其实就是尽量保证不出现新的错误,对于新手来说是致命的。
第三条
gcc is unable to create an executable file.
If gcc is a cross-compiler, use the --enable-cross-compile option.
Only do this if you know what cross compiling means.
C compiler test failed.
这个就很奇怪。一开始在编译脚本里面设置:
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
就会报这个错误。但是添加了下面这行脚本就行了。
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
c编译器是集成在ndk里面的。
奇怪的地方:a)为啥要特别指定c编译器,而且指向的是ndk里面的而不是系统的。
b)第一次成功后去掉这行脚本重新编译又正常了。
编译64位aarch64架构abi为arm64-v8a的so库脚本
ffmpeg3.2.1,ndk版本:android-ndk-r14b-linux-x86_64,两者存放在home/用户名/目录下
#!/bin/bash
echo It is ok
NDK=~/android-ndk-r14b-linux-x86_64/android-ndk-r14b
SYSROOT=
N
D
K
/
p
l
a
t
f
o
r
m
s
/
a
n
d
r
o
i
d
−
21
/
a
r
c
h
−
a
r
m
64
T
O
O
L
C
H
A
I
N
=
NDK/platforms/android-21/arch-arm64 TOOLCHAIN=
NDK/platforms/android−21/arch−arm64TOOLCHAIN=NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
CPU=arm64
PREFIX=
(
p
w
d
)
/
a
n
d
r
o
i
d
/
(pwd)/android/
(pwd)/android/CPU
#ADDI_CFLAGS="-marm"
ADDI_CFLAGS="-fPIE -pie"
ADDI_LDFLAGS="-fPIE -pie"
function build_one
{
./configure
–prefix=KaTeX parse error: Undefined control sequence: \ at position 8: PREFIX \̲ ̲--enable-shared…TOOLCHAIN/bin/aarch64-linux-android-
–sysroot=$SYSROOT
–target-os=linux
–arch=aarch64 \
–extra-cflags="-0s -fpic"
$ADDITIONAL_CONFIGURE_FLAG
make clean
echo “build $CPU”
make -j4
make install
}
build_one
类似的,下面是abi为armeabi-v7a的脚本
#!/bin/bash
echo It is ok
NDK=~/android-ndk-r14b-linux-x86_64/android-ndk-r14b
SYSROOT=
N
D
K
/
p
l
a
t
f
o
r
m
s
/
a
n
d
r
o
i
d
−
19
/
a
r
c
h
−
a
r
m
T
O
O
L
C
H
A
I
N
=
NDK/platforms/android-19/arch-arm TOOLCHAIN=
NDK/platforms/android−19/arch−armTOOLCHAIN=NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=
(
p
w
d
)
/
a
n
d
r
o
i
d
/
(pwd)/android/
(pwd)/android/CPU
ADDI_CFLAGS="-marm"
#export SRC_PATH="~/ffmpeg-3.2.1"
function build_one
{
./configure
–prefix=KaTeX parse error: Undefined control sequence: \ at position 8: PREFIX \̲ ̲--enable-shared…TOOLCHAIN/bin/arm-linux-androideabi-
–target-os=linux
–arch=armeabi-v7a
–sysroot=$SYSROOT \
–extra-cflags="-0s -fpic $ADDI_CFLAGS"
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one