live555使用NDK21编译出arm64-v8a和armeabi-v7a
一、编译环境
二、编写编译脚本
环境和源码弄好后,就可以开始进行编写编译脚本
1 编写arm64-v8a脚本
将下载好的live555源码的压缩包进行解压后,在根目录下新建一个文件config.android-arm64
NDK=/opt/sdk/ndk/21.1.6352462 TOOLCHAIN=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64 API=21 SYSROOT=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot CROSS_PREFIX=$(TOOLCHAIN)/bin/aarch64-linux-android- DESTDIR=$(shell pwd)/../arm64-v8a COMPILE_OPTS = $(INCLUDES) -m64 -fPIC -fpic -I$(SYSROOT)/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DNO_GETIFADDRS=1 --sysroot=$(SYSROOT) C = c C_COMPILER = $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang C_FLAGS = $(COMPILE_OPTS) CPP = cpp CPLUSPLUS_COMPILER = $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang++ CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 OBJ = o LINK = $(CPLUSPLUS_COMPILER) -o LINK_OPTS = -static-libstdc++ CONSOLE_LINK_OPTS = $(LINK_OPTS) LIBRARY_LINK = $(CROSS_PREFIX)ar cr LIBRARY_LINK_OPTS = LIB_SUFFIX = a LIBS_FOR_CONSOLE_APPLICATION = LIBS_FOR_GUI_APPLICATION = EXE =
1 编写armeabi-v7a脚本
跟上面编译v8a脚本一样,在根目录下创建config.android-armv7
文件
NDK=/opt/sdk/ndk/21.4.7075529 TOOLCHAIN=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64 API=eabi21 SYSROOT=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot CROSS_PREFIX=$(TOOLCHAIN)/bin/arm-linux-androideabi- DESTDIR=$(shell pwd)/../armeabi-v7a COMPILE_OPTS = $(INCLUDES) -m32 -fPIC -fpic -I$(SYSROOT)/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=32 -DNO_OPENSSL=1 -DNO_GETIFADDRS=1 --sysroot=$(SYSROOT) C = c C_COMPILER = $(TOOLCHAIN)/bin/armv7a-linux-android$(API)-clang C_FLAGS = $(COMPILE_OPTS) CPP = cpp CPLUSPLUS_COMPILER = $(TOOLCHAIN)/bin/armv7a-linux-android$(API)-clang++ CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 OBJ = o LINK = $(CPLUSPLUS_COMPILER) -o LINK_OPTS = -static-libstdc++ CONSOLE_LINK_OPTS = $(LINK_OPTS) LIBRARY_LINK = $(CROSS_PREFIX)ar cr LIBRARY_LINK_OPTS = LIB_SUFFIX = a LIBS_FOR_CONSOLE_APPLICATION = LIBS_FOR_GUI_APPLICATION = EXE =
3 关于脚本的部分说明
NDK=/opt/sdk/ndk/21.4.7075529 TOOLCHAIN=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64 API=21 SYSROOT=$(NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot CROSS_PREFIX=$(TOOLCHAIN)/bin/aarch64-linux-android- DESTDIR=$(shell pwd)/../arm64-v8a COMPILE_OPTS = $(INCLUDES) -m64 -fPIC -fpic -I$(SYSROOT)/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DNO_GETIFADDRS=1 --sysroot=$(SYSROOT) # -DNO_OPENSSL=1 这个宏定义如果不配置,会默认使用ssl, 当前环境没有ssl库的情况下就会编译出错,所以屏蔽掉ssl依赖 # -DNO_GETIFADDRS=1 API 21的工具没有相关函数,所以屏蔽 C = c #c ,指的是.c 文件扩展名,非c编译器 C_COMPILER = $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang #C_COMPILER ,c文件编译器,使用clang C_FLAGS = $(COMPILE_OPTS) CPP = cpp #同样,cpp指的是 .cpp扩展名 CPLUSPLUS_COMPILER = $(TOOLCHAIN)/bin/aarch64-linux-android$(API)-clang++ #c++ 编译器 CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 OBJ = o LINK = $(CPLUSPLUS_COMPILER) -o #LINK 编译可执行程序demo的命令,编译+连接 -o 后面加可执行程序的名称 LINK_OPTS = -static-libstdc++ #编译连接可执行程序 的选项,对于android 这里 -static-libstdc++ 表示对c++库使用静态的连接,不然默认使用动态库,在设备上运行的时候会 dlopen c++.so erro。 CONSOLE_LINK_OPTS = $(LINK_OPTS) LIBRARY_LINK = $(CROSS_PREFIX)ar cr #制作库的命令, ar 命令, cr是参数。 LIBRARY_LINK_OPTS = LIB_SUFFIX = a #静态库 .a LIBS_FOR_CONSOLE_APPLICATION = LIBS_FOR_GUI_APPLICATION = EXE =
三、执行编译
1 编译v8a脚本
在根目录执行下面三个命令:
./genMakefiles android-arm64 # (这一步生成特定makefile文件) make make install
1 编译v7a脚本
注意:如果之前执行了编译v8a脚本,在执行编译v7a的时候记得先make clean
一下
make clean ./genMakefiles android-armv7 # (这一步生成特定makefile文件) make make install
编译完后会在根目录下生成arm64-v8a/armeabi-v7a目录,里面有live555的静态库、头文件和可执行文件
![]() |
![]() |
![]() |
---|
四、官方文档
有时间可以详细的看官方说明http://live555.com/liveMedia/
这里可以找到下载链接和编译说明等等
![]() |
![]() |
---|
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!