NDK编译log分析

文章详细介绍了ndk-build的执行流程,包括环境初始化、解析mk文件、确定依赖和模块、执行clean、编译源文件、安装SO库以及strip处理,特别是strip选项如何控制优化。

ndk-build -B -j64 NDK_LOG=1 V=1

加上V=1,可以把clang++编译每个文件的编译命令打印出来。

可以看到ndk-build的执行流程:

1:初始化环境;确认编译器、platform、abis、查找两个mk,等

2:开始解析Application.mk,再解析Android.mk ;

 3:根据mk,确定依赖,以及编译module;

4:执行clean,删除编译历史文件;

5:开始编译src文件。

6:install so 

7:确认是否需要strip

使用 llvm-strip工具

llvm-strip --strip-unneeded 

使用APP_STRIP_MODE进行控制,默认为 --strip-unneeded 

# APP_STRIP_MODE := none

8:处理shared_lib

使用 clang++  -o进行指定依赖so

### 使用NDK编译vsomeip库的指南 使用NDK编译`vsomeip`库涉及配置CMake和Android NDK工具链,以确保生成适合Android平台的共享库(`.so`文件)。以下内容将详细介绍如何完成这一任务。 #### 1. 环境准备 在开始编译之前,需要确保开发环境已正确设置。包括以下步骤: - 安装Android NDK,并配置其路径。 - 安装CMake和Ninja构建工具。 - 确保目标设备支持所需的API级别。 示例配置如下[^1]: ```cmake set(CMAKE_C_FLAGS -nostdlib) set(CMAKE_SYSTEM_NAME Android) # System Name set(CMAKE_SYSTEM_VERSION 24) # API level set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) # ABI set(CMAKE_ANDROID_NDK /home/dev/Android/Sdk/ndk/19.2.5345600) # NDK PATH set(CMAKE_ANDROID_NDK_VERSION 19) set(CMAKE_ANDROID_STL_TYPE c++_static) set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN ${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64) ``` #### 2. 下载 vsomeip 源码 从官方仓库或可信来源下载`vsomeip`的源代码。例如,可以通过Git克隆项目: ```bash git clone https://github.com/bosch-connected-devices/vsomeip.git cd vsomeip ``` #### 3. 配置 CMakeLists.txt 为了使`vsomeip`能够与NDK兼容,需要调整项目的`CMakeLists.txt`文件。以下是关键配置项: - 设置目标平台为Android- 链接必要的依赖库,如Boost、log等。 - 指定ABI架构和STL类型。 示例配置: ```cmake cmake_minimum_required(VERSION 3.4.1) project(vsomeip) # 配置Android相关参数 set(CMAKE_SYSTEM_NAME Android) set(CMAKE_SYSTEM_VERSION 24) set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) set(CMAKE_ANDROID_NDK /path/to/your/android/ndk) set(CMAKE_ANDROID_STL_TYPE c++_static) # 添加源文件 add_subdirectory(src) # 链接依赖库 target_link_libraries(vsomeip boost::boost log::log) ``` #### 4. 编译过程 进入项目目录后,执行以下命令进行编译: ```bash mkdir build && cd build cmake .. \ -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_PLATFORM=android-24 \ -DANDROID_ABI=armeabi-v7a \ -DANDROID_STL=c++_static ninja ``` 上述命令会生成针对Android平台的共享库文件(`.so`)[^2]。 #### 5. 调试与测试 编译完成后,可以将生成的`.so`文件复制到Android项目中,并通过JNI接口调用。确保目标设备上安装了必要的依赖库(如Boost)。 --- ### 示例代码:CMakeLists.txt 配置 以下是一个完整的`CMakeLists.txt`示例: ```cmake cmake_minimum_required(VERSION 3.4.1) project(vsomeip) # 配置Android相关参数 set(CMAKE_SYSTEM_NAME Android) set(CMAKE_SYSTEM_VERSION 24) set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) set(CMAKE_ANDROID_NDK /path/to/your/android/ndk) set(CMAKE_ANDROID_STL_TYPE c++_static) # 添加源文件 add_subdirectory(src) # 链接依赖库 find_package(Boost REQUIRED) find_package(log REQUIRED) target_link_libraries(vsomeip Boost::boost log::log) ``` --- ### 注意事项 - 确保`vsomeip`的所有依赖项均已正确配置并可用。 - 如果遇到链接错误,请检查NDK版本是否与`vsomeip`兼容。 - 根据实际需求调整ABI架构(如`arm64-v8a`)和API级别。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值