android-4.0.3_r1源码下载和编译

本文详细介绍了使用Ubuntu 14.04系统从零开始编译Android 4.0.3源码的过程,包括环境搭建、源码下载、编译配置、常见错误解决等关键步骤。

1. 用vmware安装ubuntu14.04 64位系统,处理器数量设置为2,硬盘设置为70GB.

1.1 更新源

sudo cp /etc/apt/sources.list/etc/apt/sources.list.bak

sudo gedit /etc/apt/sources.list

删除原有源

添加阿里源

deb http://mirrors.aliyun.com/ubuntu/trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/trusty-backports main restricted universe multiverse

更新

sudo apt-get update


2. 下载android-4.0.3_r1源码。

2.1 创建bin目录,并添加到环境变量

$ mkdir ~/bin

$ PATH=~/bin:$PATH

2.2 下载Repo工具

$ curlhttps://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

2.3 创建工作目录

$ mkdir android-4.0.3_r1

$ cd android-4.0.3_r1

2.4 配置姓名和邮箱

$ git config --global user.name"liguangzhi"

$ git config --global user.email "liguangzhi@163.com"

2.5 更新最新版本Repo

$ repo init -u https://android.googlesource.com/platform/manifest-b android-4.0.3_r1

2.6 下载android源码树

$ repo sync


3. 准备编译环境

3.1 降低gcc/g++版本

将其改为4.4

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

cd /usr/bin

ls -l gcc*

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc

ls -l g++*

sudo mv g++ g++.bak

sudo ln -s g++-4.4 g++

gcc -v

g++ -v

sudo apt-get install g++-4.4-multilib

3.1 卸载open jdk

3.2 oracle官网下载jdk-6u38-linux-x64.bin


3.3 解压

$ ./jdk-6u38-linux-x64.bin

3.4 配置环境变量

gedit ~/.bashrc

export JAVA_HOME=/home/lu/jdk

export JRE_HOME=/home/lu/jdk/jre

exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source ~/.bashrc

3.5 检查安装


3.6 重新安装 jdk

$ sudo add-apt-repository "debhttp://archive.canonical.com/ lucid partner"

$ sudo apt-get update


4. 编译源码

4.1 初始化编译环境

$ sudo chmod -R 777 ./android-4.0.3_r1

$ source build/envsetup.sh

4.2 选择需要编译的版本类型

$ lunch full-eng

4.3 开始编译

$ make –j4

4为cpu的核心数

编译过程


编译完成

I5、8G机器满负荷运行,编译2小时



System.img大小为173.5MB.


5. 模拟运行

$ source build/envsetup.sh

$ lunch full-eng

$ emulator

 

6. 编译错误及解决方法

问    题:asm/errno.h: No such file or directory

解决方法: 64位: sudo apt-get install linux-libc-dev

        32位: sudo apt-get install linux-libc-dev:i386

 

问    题:/usr/bin/ld: cannot find -lz

解决方法: 64位: sudo apt-get install zlib1g-dev

        32位: sudo apt-get install lib32z1-dev

 

问    题: /bin/bash:bison: command not found

解决方法: sudo apt-get install bison

 

问    题: /bin/bash:flex: command not found

解决方法: sudo apt-get install flex

 

问    题:usr/bin/ld: cannot find libncurses.so.5

解决方法: sudo apt-get install lib32ncurses5-dev

 

问    题:dalvik/vm/native/dalvik_system_Zygote.cpp:222:43: error: ‘setrlimit’ was notdeclared in this scope err

解决方法:

在dalvik/vm/native/dalvik_system_Zygote.cpp中间增加一个头文件#include<sys/resource.h>

#include "Dalvik.h"

#include"native/InternalNativePriv.h"

#include <sys/resource.h>

 

问    题: fatalerror: X11/Xlib.h: No such file or directory

解决方法: sudo apt-get install libx11-dev:i386(安装32位)

 

问    题: out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o:undefined reference to symbol 'XInitThreads'//usr/lib/i386-linux-gnu/libX11.so.6: error adding symbols: DSO missing fromcommand line  collect2: ld returned 1exit status

解决方法: 修改development/tools/emulator/opengl/host/renderer/Android.mk文件

添加一行:LOCAL_LDLIBS += -lX11

 

问    题:/usr/include/zlib.h:34: fatal error: zconf.h: No such file or directory

解决方法: lib1g-dev有zconf.h头文件修改了路径,放到了/usr/include/x86_64-Linux-gnu/,将其拷贝到/usr/include/下即可

 

问    题: GL/glx.h:No such file or directory. compilation terminated.

解决方法: sudo apt-get install libgl1-mesa-dev

 

问    题: cannotfind -lGL

解决方法: sudo apt-get install libgl1-mesa-glx:i386

        sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

 

问    题: sh: 1:gperf: not found

解决方法: sudo apt-get install gperf

 

问    题: Can'tlocate Switch.pm in @INC

解决方法: sudo apt-get install libswitch-perl

<think>我们注意到用户的问题是关于解压CMake的tar.gz文件时遇到目标路径是一个目录的错误。根据引用[1]中的步骤4,用户执行了类似`tar zxvf cmake-3.12.4-Linux-x86_64.tar.gz`的命令,但出现了错误提示,表明目标路径是一个目录。这通常是因为在解压命令中,源文件(tar.gz文件)的路径被错误地指定为了一个目录,而不是文件。 ### 错误原因分析 1. **命令格式错误**:`tar`命令的第一个参数应该是压缩包的文件名,但用户可能不小心将目录名作为了参数,或者压缩包文件名输入错误。 2. **文件不存在**:当前目录下不存在指定的压缩包文件(例如`cmake-4.0.3-linux-x86_64.tar.gz`),而用户输入的文件名与存在的文件名不一致(注意大小写)。 3. **路径问题**:压缩包文件不在当前工作目录中,或者用户使用了错误的路径。 ### 解决方案 #### 步骤1:确认当前目录文件存在 在解压之前,请确保: - 你已经进入了压缩包所在的目录(例如`/home/cunxin`)。 - 压缩包文件确实存在,并且文件名完全匹配(包括大小写)。 使用以下命令查看当前目录下的文件: ```bash ls ``` 检查输出中是否有`cmake-4.0.3-linux-x86_64.tar.gz`(注意你的实际文件名,可能大小写有差异,比如可能是`Linux`而不是`linux`)。如果文件名不一致,请使用正确的文件名。 #### 步骤2:正确执行解压命令 假设压缩包文件名为`cmake-4.0.3-Linux-x86_64.tar.gz`(注意大小写),则解压命令应为: ```bash tar zxvf cmake-4.0.3-Linux-x86_64.tar.gz ``` 如果文件名是`cmake-4.0.3-linux-x86_64.tar.gz`(全小写),则使用: ```bash tar zxvf cmake-4.0.3-linux-x86_64.tar.gz ``` #### 步骤3:处理常见错误情况 - **情况1:如果压缩包不在当前目录**,可以使用绝对路径或相对路径指定压缩包位置。例如,如果压缩包在`/home/user/Downloads`目录下,而当前目录是`/home/user`,则命令为: ```bash tar zxvf Downloads/cmake-4.0.3-Linux-x86_64.tar.gz ``` - **情况2:如果提示“目标路径是一个目录”**,这通常是因为在`tar`命令中,压缩包文件名参数被遗漏了,而后面要解压到的目录参数被当成了压缩包文件。例如: ```bash tar zxvf /path/to/directory # 错误,因为/path/to/directory是一个目录 ``` 正确的命令应该指定压缩包文件,而不是目录。 #### 步骤4:验证解压结果 解压成功后,当前目录会生成一个名为`cmake-4.0.3-Linux-x86_64`(或类似)的文件夹。使用以下命令查看: ```bash ls ``` ### 补充:设置环境变量(引用[2]) 解压完成后,需要将CMake的二进制文件路径添加到环境变量中,才能在任何位置使用`cmake`命令。根据引用[2]的方法: 1. 打开`~/.bashrc`文件(用户主目录下的配置文件): ```bash nano ~/.bashrc ``` 2. 在文件末尾添加一行(假设解压后的文件夹在`/home/cunxin/cmake-4.0.3-Linux-x86_64`): ```bash export PATH=$PATH:/home/cunxin/cmake-4.0.3-Linux-x86_64/bin ``` 注意:将`/home/cunxin`替换为你的实际路径。 3. 保存并退出(在nano编辑器中按`Ctrl+O`保存,按`Ctrl+X`退出)。 4. 使配置生效: ```bash source ~/.bashrc ``` 5. 验证安装: ```bash cmake --version ``` 应该输出`cmake version 4.0.3`。 ### 替代安装方法(如果解压方式仍然失败) 如果上述步骤仍然无法解决问题,可以考虑使用以下替代方法安装CMake: #### 方法1:使用APT安装(简单,但版本可能较低) ```bash sudo apt update sudo apt install cmake ``` 安装后,使用`cmake --version`检查版本。如果版本满足需求(4.0.3),则问题解决。 #### 方法2:通过官方脚本安装(推荐) CMake官方提供了一个安装脚本,可以自动下载并安装指定版本: ```bash wget https://github.com/Kitware/CMake/releases/download/v4.0.3/cmake-4.0.3-Linux-x86_64.sh chmod +x cmake-4.0.3-Linux-x86_64.sh sudo ./cmake-4.0.3-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir ``` 此脚本会将CMake安装到`/usr/local`,并自动添加到系统路径。 ### 相关问题 1. 如何卸载通过tar.gz解压安装的CMake? 2. 如何在同一台机器上安装多个版本的CMake并切换? 3. 使用`tar`解压时遇到“权限被拒绝”错误怎么办? 4. 如何为所有用户设置CMake环境变量? 通过以上步骤,用户应该能够成功解压并安装CMake。如果问题仍然存在,请检查压缩包是否完整(可重新下载)或系统权限。</think>### 解决解压 CMake 时提示"目标路径是一个目录"的问题 当您尝试解压 `cmake-4.0.3-linux-x86_64.tar.gz` 文件时遇到"目标路径是一个目录"的错误,这通常是由于路径指定错误或解压命令使用不当造成的。以下是详细解决方案: #### 🛠 问题原因分析 1. **路径混淆**:解压命令中可能同时指定了源文件路径目标路径,导致冲突 2. **目录已存在**:解压目录已经存在,且系统将其识别为目录而非文件 3. **命令格式错误**:`tar` 命令参数顺序错误或使用了错误选项 --- ### ✅ 正确解压步骤 #### 步骤 1:确认文件位置 ```bash # 进入下载目录(假设文件在下载目录) cd ~/Downloads # 确认文件存在(注意文件名大小写) ls -l cmake-*.tar.gz ``` > 如果文件名是 `cmake-4.0.3-Linux-x86_64.tar.gz`(注意大写 L),使用正确的文件名 #### 步骤 2:正确解压命令 ```bash # 方法 1:自动解压到同名目录(推荐) tar -xzvf cmake-4.0.3-linux-x86_64.tar.gz # 方法 2:指定解压目录 tar -xzvf cmake-4.0.3-linux-x86_64.tar.gz -C /opt/cmake ``` #### 步骤 3:验证解压结果 ```bash # 查看解压目录内容 ls -l cmake-4.0.3-linux-x86_64 # 应看到 bin, doc, share 等目录 bin/ doc/ man/ share/ ``` --- ### 🔧 常见错误处理 #### 情况 1:目录已存在 ```bash # 先删除已存在的目录 rm -rf cmake-4.0.3-linux-x86_64 # 再重新解压 tar -xzvf cmake-4.0.3-linux-x86_64.tar.gz ``` #### 情况 2:路径包含空格 ```bash # 使用引号包裹路径 tar -xzvf "path with spaces/cmake-4.0.3-linux-x86_64.tar.gz" ``` #### 情况 3:文件名大小写问题 ```bash # Linux 是大小写敏感系统 # 如果实际文件是 CMake-4.0.3-Linux-x86_64.tar.gz(注意大写) tar -xzvf CMake-4.0.3-Linux-x86_64.tar.gz ``` --- ### ⚙ 配置环境变量(解压后必做) ```bash # 编辑用户配置文件 nano ~/.bashrc # 在文件末尾添加(根据实际解压路径) export PATH="$PATH:/home/yourname/cmake-4.0.3-linux-x86_64/bin" # 保存后刷新配置 source ~/.bashrc # 验证安装 cmake --version # 应输出: cmake version 4.0.3 ``` --- ### 📦 替代安装方法(避免解压问题) #### 方法 1:使用官方安装脚本 ```bash wget https://cmake.org/files/v4.0/cmake-4.0.3-Linux-x86_64.sh chmod +x cmake-4.0.3-Linux-x86_64.sh sudo ./cmake-4.0.3-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir ``` #### 方法 2:APT 安装(推荐) ```bash sudo apt update sudo apt install cmake=4.0.3-* ``` --- ### 📌 使用注意事项 1. **解压前检查文件完整性**: ```bash md5sum cmake-4.0.3-linux-x86_64.tar.gz # 对比官网MD5值:https://cmake.org/files/v4.0/ ``` 2. **权限问题处理**: ```bash # 若遇到权限问题 sudo tar -xzvf cmake-4.0.3-linux-x86_64.tar.gz -C /opt sudo chown -R $USER:$USER /opt/cmake-4.0.3-linux-x86_64 ``` 3. **多版本共存**: ```bash # 使用符号链接管理版本 sudo ln -sf /opt/cmake-4.0.3-linux-x86_64/bin/cmake /usr/bin/cmake ``` --- ### 相关问题 1. 如何验证下载的 CMake tar.gz 文件完整性? 2. 安装多个 CMake 版本时如何切换默认版本? 3. 环境变量设置后 `cmake --version` 仍不生效怎么办? 4. 如何完全卸载手动安装的 CMake? 5. 使用 APT 安装时如何锁定特定 CMake 版本?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值