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/
这里可以找到下载链接和编译说明等等
![]() |
![]() |
|---|
参考:
<一 编译> ndk 编译live555 for android
live555使用NDK21编译出arm64-v8a和armeabi-v7a的更多相关文章
- webrtc的音频处理模块apm( audio processing)下载与编译出libwebrtc_audio_preprocessing.so
webrtc代码在android和chromium项目中都有.但是android中的那个带有Android.mk,稍微修改下就能用ndk-build编译出libwebrtc_audio_preproc ...
- 使用AS编译jni文件无法编译出arm64-v8a,x86_64和mips64平台的.so文件的解决方法
我用的插件版本是:classpath 'com.android.tools.build:gradle-experimental:0.4.0',AS集成和使用ndk编译项目参考官方demo:https: ...
- lua编译出so文件
把lua编译出so文件 http://superuser.com/questions/557884/getting-error-recompile-with-fpic http://guiquanz. ...
- vs2010编译出的exe“应用程序无法正常启动(0xc0150002)”
今天编译出一个使用ogre1.6.5动态库的应用程序,启动时报"应用程序无法正常启动(0xc0150002)"的错误提示. 编译环境是Win10+VS2010.这个错误可以在Win ...
- 在Mac上用自己编译出的DNX运行.NET程序
DNX的全称是.NET Execution Enviroment(.NET执行环境),它是.NET跨平台的一个重要角色.如果你关注.NET的跨平台,一定要关注DNX. 由于Mono 4.0的一个bug ...
- 第三章 用SDK编译出第一个在Linux下的软件界面
第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...
- 修改OpenSSL默认编译出的动态库文件名称
在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中 ...
- unity, unity默认的Arial字体在编译出的h5版本中不显示
unity默认的Arial字体在编译出的h5版本中不显示.改用自己的字体可显示.
- windows下使用mingw编译出ffplay(简化版)
之前编译FFmpeg直接使用dll.lib,默认的mingw也不会编译出ffplay.exe. 近期由于工作需要,需要验证下修改之后的FFmpeg版本是否正常,需要使用ffplay.exe. 比较暴力 ...
- Android Studio 动态调试 apk 反编译出的 smali 代码
在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...
随机推荐
- (C语言)每日代码||2023.12.27||关于(++i)+(++i)以及(++i)+(i = 100)
#include <stdio.h> int main() { int i = 1; int a = (++i) + (++i); printf("a = %d,i = %d\n ...
- KVM环境:Active console session exists for this domain
做测试过程中被迫换电脑,但没有关掉原电脑的连接,所以用其他电脑连接测试环境时,发现之前的kvm测试环境因没有断开,无法连接: error: operation failed: Active conso ...
- SSD 表项管理概述(一)——L1、L2、L3
分类 名称 说明 映射表相关 L1 Table 记录每个4KB用户数据在SSD上的存放物理地址: L2 Table 记录每个sub L1 Table在SSD上的存放物理地址: L3 Table 记录每 ...
- patch命令
patch命令 patch指令让用户利用设置修补文件的方式.修改.更新原始文件,倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行,如果配合修补文件的方式则能一次修补大批文件,这也是Linux系 ...
- Sourcetree 如何关联自己的gitlab仓库
现在有些企业自己搭建了gitlab服务器,通过sourcetree从企业服务器拉取代码的时候会提示认证失败.今天搞了大半天才搞懂,给我自己做个笔记. 添加账户 托管服务商 选择 GitLab CE 托 ...
- 【LeetCode剑指offer 01】数组中重复的数字、两个栈实现队列
数组中重复的数字 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数 ...
- 【Azure Developer】在Azure Storage Account的两个Blob可以同步吗?可以跨订阅拷贝吗?
问题描述 不同订阅下的Azure Storage Account中Blob资源可以同步吗? 解决方案 可以.通过Azure 官方推荐的Storage Account工具来完成 Copy/Paste 操 ...
- 【Azure 应用服务】App Service 默认开放端口说明, 如何禁用Web app的端口号?
问题描述 基于安全的角度来考虑,在网站上线之前用户会对自己的网站进行安全扫描,以防网站因为某些漏洞而被非法攻击. 而在扫描过程中,会发现除了 80 和 443 之外的一些其他端口也被开放了.例如:45 ...
- 可视化技术在 Nebula Graph 中的应用
本文首发于 Nebula Graph Community 公众号 本文整理自 #可视化 on Live 主题直播,在本期直播中 3 位可视化嘉宾讲述了他们眼中的可视化,以及他们在可视化项目实践中踩过的 ...
- STM32标准库通用定时器输入捕获
STM32标准库定时器输入捕获 1.输入捕获介绍 输入捕获为STM32定时器的一个功能,可以用来测量输入信号的频率和占空比. 具体原理:当输入信号经过比较捕获通道时,STM32会依据通道的极性设置决定 ...




