FLAGS组成
我们在编译ffmpeg库的sh脚本里有这么一串FLAGS,用于gcc或clang编译器
FLAGS=“-isystem KaTeX parse error: Expected group after '_' at position 54: …-androideabi -D_?_ANDROID_API__=API -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -marm -march=$CPU -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,–noexecstack -Wformat -Werror=format-security -O0 -fPIC”,
这么一长串是怎么来的,谁人能记住,其实不用记住,它是从Android开发工具里导出来的,然后再拼上include头文件路径等。
1.1 从androidStuido里导出FLAGS
我们使用androidStudio向导新建一个nativeC++工程(如工程名nativeTest),编译成功后,我们打开电脑位置到nativeTest目录下,搜索build.ninja文件,打开后找到FLAGS,如下图:
复制出FLAGS的值:FLAGS = -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC
1.2 再拼一个-isystem 和 android API平台版本号
isystem
isystem表示在后面的这个目录下$NDK_ROOT/sysroot/usr/include/arm-linux-androideabi 搜索头文件
android API平台版本号
-D__ANDROID_API__=21;
-D__ANDROID_API__=21: 表示编译ffmpeg是针对android系统API 21版本。从21开始ndk用的是clang来编译C/C++。
最终FLAGS的值如下:
-
32位(如armv7-a): FLAGS = -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC -
64位(如armv8-a) FLAGS = -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC
|