001@ubuntu 18无法编译Android 7/8问题

本文档详细介绍了在Ubuntu16.04和18.04环境下编译Android7/8系统的常见问题及解决方案,包括如何解决jack-server端口冲突、内存不足等问题,并给出了适合的Java和GCC版本建议。

 

android7/8 默认启用jack-server, 对代码进行预编译和处理,加快系统编译和构建,弊端是同一台机器不允许多用户同时编译,

经常出现端口冲突,内存不足和溢出现象<android 10之后该功能默认被禁用了>。

另外ubuntu系统默认开启了自动升级功能,因此默认会升级相关软件包或依赖包,从而出现无法编译代码问题。

主要问题如下:

ubuntu 16.04     Linux 4.15.0-142-generic    gcc 5.4.x

1)java 8u292  <1.8.0_292>  无法编译android7/8,错误显示jack-server服务端口(8086/8087)被占用,修改相关端口,重启服务,

此时服务无法开启<即使卸载应用,重新安装>,查看dump显示端口已经被重新获取到,但依旧无法重启服务,原因还是端口被占用。

2)java 8u282 <1.8.0_282> 及早期版本会在同机多人编译Android 版本时,会出现端口冲突,但只要修改不同的端口,即可正常开启jack-server,不影响编译。

 

ubuntu 18.04   Linux 5.4.0-70-generic     gcc 7.5.x

1)java 8u292   在没有同机多人编译android时,jack-server 服务可正常开启。

2)该版本编译错误主要集中在

flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.Aborted (core dumped),

但一般只要执行如下命令即可编译:  export  LC_ALL=C

 

3)在2)的基础上编译通过后,会出现新的问题:

 3.1)在编译android 7/8代码时,目前出现编译bootloader无法开机现象<Lily和L2系列都出现了类似问题>,更换早期版本发布的emmc_appsboot.mbn文件即可开机<待确认是哪个工具包导致的>

 

需要注意:

1)在编译android 7/8代码时,尽量确保java版本不要高于 8u282。

2) 如果使用ubuntu 18.04及其更高linux版本编译android 7/8及其更低android版本时,注意gcc版本不要高于 7.x

 2.1) 不建议使用ubuntu20.x及其以上版本, 之前有测试过无法编译modem<adsp和boot模块无法编译,高通源代码会去匹配linux版本,代码自身不带20.x相关的镜像>

3)必要的时候可以关闭linux自动更新功能

 

附:

1)官方关于java 8u292更新信息:<安全漏洞修复等>

https://www.linuxcompatible.org/story/rhsa2021144401-moderate-openjdk-8u292-security-update-for-portable-linux-builds/

 

2)openjdk-8u282 可以自行下载

apt install 命令安装的jdk默认路径在: /usr/lib/jvm/,  因此将如上包解压后放到: /usr/lib/jvm/下,

$ sudo tar zxvf java-8-openjdk-amd64.tar.gz  -C  /usr/lib/jvm/  &&  cd /usr/lib/jvm/  

$ sudo rm -r java-1.8.0-openjdk-amd64 && sudo ln -s java-8-openjdk-amd64  java-1.8.0-openjdk-amd64 

 

如果默认路径不在/usr/lib/jvm/下,请先查找对应的实际安装路径,可借助 which java获取相关的执行路径和安装路径

usr:~$ which java

/usr/bin/java

usr:~$ ls -la /usr/bin/java

lrwxrwxrwx 1 root root 22 Oct 30  2017 /usr/bin/java -> /etc/alternatives/java

usr:~$ ls -la /etc/alternatives/java

lrwxrwxrwx 1 root root 46 Nov  6  2017 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

<think>我们正在解决一个编译错误:fatal error: rknn_api.h: No such file or directory 这个错误表明编译器在默认的包含路径中找不到rknn_api.h头文件。 解决方法是在编译命令中通过-I选项指定头文件所在的目录。 假设rknn_api.h位于/path/to/rknn/include,那么编译命令应该添加-I/path/to/rknn/include。 例如: g++ -I/path/to/rknn/include your_source.cpp -o your_program 如果使用CMake,可以在CMakeLists.txt中添加include_directories(/path/to/rknn/include)或者使用target_include_directories。 根据引用[3]中的方法,我们也可以将头文件路径添加到环境变量中,但更常见的做法是在编译命令中指定。 下面我们分步骤说明:</think>### 如何解决编译时头文件 `rknn_api.h` 找不到的问题 #### 问题原因分析 编译错误 `fatal error: rknn_api.h: No such file or directory` 表明编译器在默认搜索路径中找不到 Rockchip NPU 开发所需的头文件。这通常是由于以下原因: 1. **未正确安装 RKNN SDK**:缺少 Rockchip NPU 开发工具包 2. **路径未配置**:编译器未获知头文件位置 3. **环境变量缺失**:未设置 SDK 路径到系统变量 --- #### 解决方法(分步骤操作) ##### 步骤 1:确认头文件位置 首先找到 `rknn_api.h` 的实际路径(通常位于 RKNN SDK 安装目录): ```bash # 示例搜索命令(根据实际安装路径调整) find /opt -name "rknn_api.h" 2>/dev/null # 可能返回结果:/opt/rknn_sdk/include/rknn_api.h ``` ##### 步骤 2:在编译命令中添加路径 通过 `-I` 参数指定头文件目录: ```bash # GCC 编译示例 g++ -I/path/to/rknn_sdk/include your_code.cpp -o output_binary # 实际示例(假设 SDK 在 /opt/rknn_sdk) g++ -I/opt/rknn_sdk/include object_detection.cpp -lrockchip_npu -o detector ``` ##### 步骤 3:配置环境变量(持久生效) 在 `~/.bashrc` 或 `~/.zshrc` 中添加: ```bash # 设置 C/C++ 头文件搜索路径 export CPATH=/opt/rknn_sdk/include:$CPATH # 设置库文件路径(可选) export LD_LIBRARY_PATH=/opt/rknn_sdk/lib:$LD_LIBRARY_PATH ``` 生效配置: ```bash source ~/.bashrc ``` ##### 步骤 4:CMake 项目配置 在 `CMakeLists.txt` 中添加: ```cmake include_directories(/opt/rknn_sdk/include) # 头文件路径 link_directories(/opt/rknn_sdk/lib) # 库文件路径 target_link_libraries(your_target rockchip_npu) # 链接 NPU 库 ``` ##### 步骤 5:验证安装 检查 SDK 是否完整: ```bash ls /opt/rknn_sdk/include | grep rknn_api.h # 确认头文件存在 ls /opt/rknn_sdk/lib | librocksoft_npu.so # 确认动态库存在 ``` --- #### 注意事项 1. **权限问题**:若 SDK 安装在系统目录,可能需要 `sudo` 权限 2. **版本匹配**:确保 SDK 版本与 NPU 硬件兼容 3. **交叉编译**:嵌入式开发需使用 arm64 工具链(如 `aarch64-linux-gnu-g++`) > 提示:Rockchip NPU 开发通常需搭配特定驱动,完整环境搭建参考[官方文档](https://github.com/rockchip-linux/rknn-toolkit)。 --- #### 相关问题 1. 如何交叉编译 Rockchip NPU 的 C++ 程序? 2. RKNN SDK 安装后出现 `librockchip_npu.so` 找不到应如何解决? 3. 在 Android 系统中集成 RKNN 模型需要哪些额外配置? > 引用说明:环境变量配置方法参考 Linux 开发惯例[^3],路径指定原则与 CUDA 开发类似[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值