飞凌 OK6410 开发板 Ubuntu16.04 desktop android-4.0.1_r1的编译环境搭建

Ubuntu16.04 desktop android-4.0.1_r1的编译环境搭建

  版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2020-06-08,13:19:31
  作者By-----Reverse-xiaoyu----博客园

  Ubuntu12.04,Ubuntu14.04的环境我都有搭配过,但是适配我自己其他开发环境,我依旧采用Ubuntu16.04 desktop来创建android-4.0.1_r1的编译环境,搭建这个环境耗费了我很长时间,记录一下从我搭建Ubutnu系统开始吧

1、Ubuntu16.04虚拟机的搭建

  我使用的是VMware Workstation 15中文版来创建Ubuntu16.04 desktop。

  VMware Workstation 15中文版下载连接:提取码:3qnh

  Ubuntu16.04 desktop:提取码:ppmx

1.1、Ubuntu16.04 的安装

           

  点击创建新的虚拟机如下图所示:

                 

   点击下一步:

                 

  下一步:

                  

  下一步:

                 

   下一步:

                 

   下一步:先选择硬件配置

                 

   自定义硬件:博主的机器是i7:10750H CPU,16GB内存,所以给虚拟机分配的是8G 内存,8线程

                 

                  

                  

  网络适配器建议选择NAT模式:

                  

   主要是这几个的配置,后面 USB 控制器,声卡,打印机,显示器,就都默认配置就好了,配置完成后,点击关闭

                 

  点击完成后如下:

                  

  点击 Install Ubuntu进行安装

                 

   点击 Continue,安装过程中千万不到勾选下载更新跟安装第三方软件,否则你会因为 Ubuntu 默认源的原因,导致你的安装时间漫长无比,可以等系统安装完,进入系统更改下载源后,通过命令行去更新软件或者下载软件,请跟随我博客的脚步我带你节省最大的时间去安装。

                 

   点击 Install Now

                 

   会弹出下面一个框,继续点击 Continue

                 

   选择你的位置:这个会关系到你 Ubuntu 系统的时间,无所谓了,爱写哪写哪,反正只是虚拟机拿来做编译环境用,看时间还是可以使用大家的手机,手表看的

                 

   这个框会因为分辨率问题,窗口部分显示不全,没关系,你鼠标拖进去,是可以移动的,键盘也默认配置就OK

                 

   点击 Continue

                 

   配置计算机用户名跟密码

                  

  框不完整?鼠标可以拖动啦,分辨率显示的问题,后面系统安装完成可以修改,点击Continue开始系统的安装吧,耐心等待他安装完成就行

                  

1.2、VMware Tools 的安装

  虚拟机安装完成后,请安装 VMware Tools,它能解决 Ubuntu 终端不能粘贴复制的问题,也能解决屏幕自动适应客户端窗口大小问题

  1、在虚拟机下会看到安装 VMware Tools,单击安装。

                  

  2、在虚拟机设备下出现VMware Tools这一项,点击打开,里面有一个VMwareTools-10.1.6-5214329.tar.gz

                 

   3、将这个文件复制到某个目录下,比如在 home下新建 Documents 文件夹

    4、进入 Documents 解压到VMwareTools-10.1.6-5214329.tar.gz

1 cd ~/Documents
2 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz

  5、进入到刚刚提取到的vmware-tools-distrib文件夹下,然后输入命令:sudo ./vmware-install.pl,然后回车。碰到yes/no 你就输入 yes,没有 yes/no 等待你就按 Enter,一路执行下去让他安装完毕就 OK 了

1 cd  vmware-tools-distrib
2 sudo ./vmware-install.pl

  6、安装完毕,重启虚拟机,然后你的屏幕会正常显示大小了,终端可以复制粘贴了

1.3、Ubuntu Software & updates 下载源的更新

  1、点击桌面右上角,设置,点击 System Settings

                

   2、点击 Software & Updates

               

   3、点击 Download from:,然后点击 Other...

               

   4、找到 China 选择阿里云,当然 China 底下的源随便你选了,我选的是 阿里 源,点击 Choose Server

               

  5、输入你创建系统时如数的密码,点击 authenticate(证明,证实),然后就 OK 了

               

   6、最后打开 Ubuntu 终端,更新下载源以及软件

1 sudo apt-get install update
2 sudo apt-get install upgrade

1.4、配置 vim

  没有 vim 用 Ubuntu 我会很难受,所以今早把 vim 进行简单配置一下

  1、使用命令 $ sudo apt-get install vim  来安装vim,安装后的vim需要进行一些配置,不然使用起来会有些不方便,比如不会自动缩进。

  2、使用命令 $ vim /etc/vim/vimrc 修改vim配置文件  (修改该文件对所有用户都生效),在该文件最后添加如下代码:

 1 set ai                          " 自动缩进,新行与前面的行保持—致的自动空格
 2 set aw                          " 自动写,转入shell或使用:n编辑其他文件时,当前的缓冲区被写入
 3 set flash                       " 在出错处闪烁但不呜叫(缺省)
 4 set ic                          " 在查询及模式匹配时忽赂大小写
 5 set nu
 6 set number                      " 屏幕左边显示行号
 7 "set showmatch                   " 显示括号配对,当键入“]”“)”时,高亮度显示匹配的括号
 8 set showmode                    " 处于文本输入方式时加亮按钮条中的模式指示器
 9 set showcmd                     " 在状态栏显示目前所执行的指令,未完成的指令片段亦会显示出来
10 set warn/nowarn                 " 对文本进行了新的修改后,离开shell时系统给出显示(缺省)
11 set ws/nows                     " 在搜索时如到达文件尾则绕回文件头继续搜索
12 set wrap/nowrap                 " 长行显示自动折行
13 "colorscheme evening            " 设定背景为夜间模式
14 filetype plugin on              " 自动识别文件类型,自动匹配对应的, “文件类型Plugin.vim”文件,使用缩进定义文件
15 set autoindent                  " 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
16 set cindent                     " 以C/C++的模式缩进
17 set noignorecase                " 默认区分大小写
18 set ruler                       " 打开状态栏标尺
19 set scrolloff=5                 " 设定光标离窗口上下边界 5 行时窗口自动滚动
20 set shiftwidth=4                " 设定 << 和 >> 命令移动时的宽度为 4
21 set softtabstop=4               " 使得按退格键时可以一次删掉 4 个空格,不足 4 个时删掉所有剩下的空格)
22 set tabstop=4                   " 设定 tab 长度为 4
23 set wrap                        " 自动换行显示
24 syntax enable
25 syntax on                       " 自动语法高亮

  注意第10、11、12行只能选一个值,不然会报错。如果有些功能自己不需要可以在行前使用符号"注释该行

  上面的方法是对vim的一些基本配置,更高级的配置可以通过vim插件实现。这里只介绍 vim 的基本配置就行了,能保证使用,更高级的配置另寻百度,这里不是我们搭建安卓编译环境的重点

2、android-4.0.1_r1代码的获取

2.1、git 的安装与简单使用

  git 的安装与使用并不是本文重点,但是由于安卓代码需要用 repo 来获取,下载 repo 需要先安装 git,因此附带简单描述

1 sudo apt-get install git
2 sudo apt-get install git-doc git-svn git-email git-gui gitk

  其中 Git 软件包包含了大部分 Git 命令,是必须安装的软件包。而第二条语句中安装的 git-doc、git-svn、git-email、git-gui、gitk 本来也是 Git 软件包的一部分,但是因为有着不一样的软件包依赖(如更多的 perl 模组和 tk 等),所以单独作为软件包发布,如果不需要使用这些软件包,可以不安装他们。

  git init :创建版本库

  git status:查看文件修改

  git add:将修改的文件提交至暂存区

  git commit:将暂存区提交至本地仓库

  git push;将本地仓库的提交提交至远端仓库

  git branch:创建分支

  git checkout:切换分支

  具体的 git 使用请移步至其他 git 使用的博客

2.2、配置 git ssh

  1、由于 GitHub 上传代码时需要 SSH 校验。因此,需要使用下面的命令在~/.ssh目录中生成一个密钥文件(id_rsa)和一个公钥文件(id_rsa.pub)

1 git config --global user.name "你的用户名"
2 git config --global user.email "你的注册邮箱"

  然后我们可通过命令 git config --list,查看是否设置成功。

  2、如果你的 Home 目录没有 .ssh目录,请先 mkdir ~/home/.ssh,并进入 .ssh 目录(cd ~/.ssh)

1  ssh-keygen -t rsa -C "youremail@example.com"

  请将  “youremail@example.com”  换成注册 GitHub 张号时输入的 E-mail。执行上面的命令会要求做一些选择或输入

               

  3、登录GitHub填入client端生成的公钥
  登录GitHub,在个人账号那里找到并打开“settings”,点入“SSH and GPG keys”:
             

                   

   title这里取个便于自己区分记忆的名字即可,Key输入框中粘贴id_rsa.pub公钥文件中的内容。

             

  找到id_rsa.pub文件(/home/.ssh/id_rsa.pub),将文件中的内容全部复制粘贴到Key中,点击“Add SSH key”。

  如果生成的公钥、密钥错误或者设置不正确,则会输出如下的信息。

  Permission denied(publickey)

  fatal:The remote end hung up unexpectedly

  如果一切都做得很完美,就会输出如下信息:

  Hi androidguy! You've successful authenticated, but GitHub does not provide shell access

2.3、下载 repo 工具:

1 mkdir ~/bin
2 PATH=~/bin:$PATH
3 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
4 chmod a+x ~/bin/repo

  上面的经过实测,是可以获取到 repo 工具的。

1 curl http://android.googlesource.com/repo > ~/bin/repo

2.4、安装python3.6以上版本 

  由于Ubuntu16以下默认的python版本为Python 2.7.12、Python 3.5.2,但是repo的运行环境是在python3.6以上版本,因此我们需要自己手动安装python3.6以上版本,博主这里安装的是目前最新的python3.8.1版本 

  配置依赖环境:

1 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

  1、下载python3.8.1版本

  python3.8.1:提取码:efo1

  2.解压下载的包,在这之前你可以先mv你的包到指定位置解压

1 tar -zxvf Python-3.8.1

  3.进入解压目录

1 cd Python-3.8.1/

  4.建立安装的目录

1 sudo mkdir -p /usr/local/python3

  5.编译安装

  执行这步是后面最好加上 --enable-optimizations 会自动安装pip3及优化配置

1 ./configure --prefix=/usr/local/python3 --enable-optimizations
2 make
3 sudo make install

  6.删除软链接

  先执行查看版本,如果有则证明软链接已存在,需要先删去以前的再重新建立

1 //这里表明我已有python3的软链接而没有pip3的软链接所以需要删除python3的软链接重新建立
2 admin@J-computer:~/Python-3.7.1$ python3 -V
3 Python 3.5.2
4  
5 admin@J-computer:~$ pip3 -V
6 bash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: No such file or directory
1 rm -rf /usr/bin/python3
2 rm -rf /usr/bin/pip3

  7.建立新的指向python3.7的软链接

1 #添加python3的软链接
2 ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
3 #添加 pip3 的软链接
4 ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

  8.检测版本

1 admin@J-computer:~$ python3 -V
2 Python 3.7.1
3 admin@J-computer:~$ pip3 -V
4 pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)

2.5、下载源码(这里提供两种方式)

   1.使用每月更新的初始化包(推荐)

   由于首次同步需要下载约 30GB 数据,过程中任何网络故障都可能造成同步失败,强烈建议使用初始化包进行初始化。下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以只保留了 .repo 目录,下载后解压再repo sync 一遍即可得到完整的目录。

  使用方法如下:

1 wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
2 tar xf aosp-latest.tar
3 cd AOSP    ## 解压得到的 AOSP 工程目录
4 ## 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
5 ## repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 (选择版本同步)
6 repo sync  ## 通常同步一遍即可得到完整目录
7 ## 或 repo sync -l 仅checkout代码

   此后,每次只需运行 repo sync 即可保持同步。强烈建议保持每天同步,并尽量选择凌晨等低峰时间,上面的下载大约需要好几天,博主自己下载花费了4天4夜

  查看所有分支

1 cd .repo/manifests
2 git branch -a

   如果想切换到其它分支可以重新执行

1 repo init -b android-6.0.1_r63
2 repo sync

   2.传统初始化方法

  建立工作目录:

1 mkdir WORKING_DIRECTORY
2 cd WORKING_DIRECTORY

   初始化仓库:

1 repo init -u https://android.googlesource.com/platform/manifest
2 ## repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest (也可以)

   上述命令会要求Repo下载最新的Android源代码,也就是master分支,如果想下载其他指定分支

1 repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

   同步Android源代码

1 repo sync

   博主这里下载的是指定分支,下载的android-4.0.1_r1,这里的代码下载需要翻墙,需要一个较稳定的网速,我大概是下载了1天

  这里后续我会上传百度网盘链接,由于我已经编译过了,代码不干净,所以不好打包压缩,后续我再下一份纯净的代码,上传百度网盘供大家下载

   下载好的代码,相关目录如下

目录名 描述
abi 应用程序二进制接口(Application Binary Interface)
bionic C/C++运行时库。在NDK程序中很大一部分调用的就是这里面的程序
bootable

用于安卓装载和启动程序。其中就包括著名的bootloader和recovery。bootloader是Android中唯一在Linux内核运行之前的程序。通过这段程序可以初始化硬件、建立内存空间的映射图等,总之一句话,bootloader就是为Linux内核准备合适的运行环境。

对于刷过机的读者对recovery应该很是熟悉。Recovery可以将一个压缩包(一般为zip格式)中的文件覆盖到手机内存中系统目录(主要是/system)的程序,也就是俗称的刷机程序

build 用于编译Android源代码以及建立system.img、randisk.img等文件的工具
cts 用于兼容性测试的工具
dalvik Dalivik虚拟机的源代码
development 高层的开发和调试工具
device 与设备相关的代码。其中包含了moto、三星的设备相关代码
docs 包含与Android源代码项目的文档和工具,如Dalivk虚拟机格式文档等
external 扩展工具的源代码
frameworks Android框架层源代码。也就是Android SDK(Java开发包)的源代码
hardware 硬件层接口和库。HAL的源代码就在这个目录中
libcore Java核心库
ndk NDK的相关源代码
packages 与Android系统一同发布的应用程序(apk程序)的源代码,如拍照、短信等程序都可以在这个目录中找到
prebuilts Android在各种平台下编译之前要使用的工具
sdk 在开发环境中使用的工具,如ddms、draw9patch、sdkmanager等
system Android的基本系统

  2.6、还原python3版本

   repo 使用时需要3.6以上版本,但是当我将python3.8.1安装完后,将终端关闭掉,会发现后续终端无法打开,因此我将 python3 更换为 python3.8.1 下载安卓源码,在安卓源码下载完毕后,还原 python3 为Python 3.5.2 版本。以便我能打开终端

  目前博主只知道这个方法,如果有知道不还原 python3 版本的,修改其他位置能使 终端打开的,希望不忘吝啬告诉我一下方法,万分感激

1 sudo mv /usr/bin/python3 /usr/bin/python3.mak
2 sudo mv /usr/bin/pip3 /usr/bin/pip3.mak
3 sudo ln -s /usr/bin/python3.5 python3
1 admin@J-computer:/usr/bin$ python3 -V 
2 Python 3.5.2

   还原过后,Ubuntu终端就可以使用了

3、编译android-4.0.1_r1源码

  先不要着急怎么编译,请先看我编译过程中遇到的报错过程,看完你就不会想着要先编译了,先按我的步骤,一步步的修改把,虽然不保证一次能过,但是能减少一步步编译导致的不断编译报错

1 sudo apt-get install git-core gnupg flex bison gperf build-essential 
2 
3       zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev 
4 
5       libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 
6 
7       libgl1-mesa-dev g++-multilib mingw32 tofrodos 
8 
9       python-markdown libxml2-utils xsltproc zlib1g-dev:i386

3.1、android 4.0 配置 Java SE 1.6

  1、下载 jdk-6u33-linux-i586.bin:提取码:qus4

  2、移到/opt目录下执行

1 chmod a+x jdk-6u33-linux-i586.bin
2 sudo ./jdk-6u33-linux-i586.bin    

  3、添加环境变量:

1 sudo vim /etc/profile

  在文件最后添加

1 #set java environment
2 export JAVA_HOME=/opt/jdk1.6.0_33
3 export JRE_HOME=/opt/jdk1.6.0_33/jre
4 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
5 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

  4、最后使环境变量生效:

1 source /etc/profile

  5、配置完后,再查看jdk版本:

1 $ java -version
2 java -version
3 java version "1.6.0_33"
4 Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
5 Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)

3.2 Ubuntu16.04 默认 make 版本过高会导致编译报错

  报错信息就不贴了,我这里代码都已经编译过了,博文后面我去找一下他人的报错信息贴上

 1 /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。
 2 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen/focaltech' failed
 3 make[5]: *** [drivers/input/touchscreen/focaltech] Error 2
 4 make[5]: *** 正在等待未完成的任务....
 5 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen' failed
 6 make[4]: *** [drivers/input/touchscreen] Error 2
 7 /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input' failed
 8 make[3]: *** [drivers/input] Error 2
 9 /home/fei/dev/android/source/prada/kernel/Makefile:1116: recipe for target 'drivers/modules.builtin' failed
10 make[2]: *** [drivers/modules.builtin] Error 2
11 make[2]: *** 正在等待未完成的任务....
12 make[2]: *** wait: 没有子进程。 停止。
13 Makefile:145: recipe for target 'sub-make' failed
14 make[1]: *** [sub-make] Error 2
15 make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'
16 kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed

  1、下载 make-3.81.tar.bz2 :提取码:xhqp 

  2、解压:

  将下载好的 make-3.8.1.tar.bz2 移动至 home 目录下,然后执行该命令:

1 tar -xvf make-3.81.tar.bz2

  3、编译:/usr/bin/make 存在2个 make

1 cd make-3.81/
2 ./configure --prefix=/usr

  指定编译目录,如果只是执行 ./configure 该命令的话,系统默认将 make 安装到 usr/local/bin/make 中,无法替换系统默认的 make4.1,系统默认仍然是 make4.1;

  然后执行 make 命令编译:

1 make
2 sudo make install

  可以通过该命令查看当前系统的 make 版本:

1 make --version

3.3 Ubuntu16.04 默认 gcc、g++ 版本过高会导致编译报错

   Ubuntu16.04上更换的阿里源是无法直接 sudo apt-get install gcc-4.4、sudo apt-get install g++-4.4版本的

   首先需要更改 /etc/apt/sources.list

1 sudo vim /etc/apt/sources.list

   将下面的粘贴至末尾

1 deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe
2 deb http://dk.archive.ubuntu.com/ubuntu/ trusty-updates main universe

   保存退出后更新一下源

1 sudo apt-get update

  这个时候可以直接获取了

1 sudo apt-get install g++-4.4
2 sudo apt-get install gcc-4.4

   可以使用 gcc --version、g++ --version查看 g++ 跟 gcc 的版本,如果是4.4版本,就OK了

3.4 perl的switch库

   如果没有安装这个库,将会导致编译报错

 1 Import includes file: out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/import_includes  
 2 target Generated: libwebcore <= external/webkit/Source/WebCore/css/tokenizer.flex  
 3 <span style="rgb(255, 255, 51);">Can't locate Switch.pm in @INC (you may need to install the Switch module)</span> (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
 4 BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
 5 Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
 6 BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.  
 7 make: *** [out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2  
 8 make: *** Waiting for unfinished jobs....  
 9 make: *** [out/target/product/mx3/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp] Error 2  
10 target Generated: libwebcore <= external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in  

   安装perl的switch库:

1 sudo apt-get install libswitch-perl

 3.5、dalvik 报错

1 dalvik/vm/native/dalvik_system_Zygote.cpp:216:43: error: ‘setrlimit’ was not declared in this scope
2 err = setrlimit(contents[0], &rlim);
3 ^
4 <command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]
5 dalvik/vm/native/java_lang_Float.cpp:1:0: note: this is the location of the previous definition
6 /*
7 ^
8 make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] Error 1
9 make: *** Waiting for unfinished jobs....

   解决办法
    添加头文件#include <sys/resource.h>到以下文件
    dalvik/vm/native/dalvik_system_Zygote.cpp

                

 3.6、host Executable 报错

   报错信息:

1 host Executable: emulator_renderer (out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer)
2 /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o: undefined reference to symbol 'XInitThreads'
3 //usr/lib/i386-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
4 collect2: ld returned 1 exit status
5 make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer] Error 1
6 make: *** Waiting for unfinished jobs....

   解决办法:

  修改development/tools/emulator/opengl/host/renderer/Android.mk文件

1 sudo gedit development/tools/emulator/opengl/host/renderer/Android.mk

  添加一行:LOCAL_LDLIBS += -lX11 注意最好是复制过去,右边的容易写错

                

3.7、后续报错信息解决

   错误1、/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
  make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1

   解决:

1 sudo apt-get install libc6-dev-i386

   错误2、make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] error 1

   解决:

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

   错误3、

1 external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory
2 compilation terminated.
3 make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o] Error 1

   解决:

1 sudo apt-get install zlib1g-dev

   错误4:

1 /usr/bin/ld: cannot find -lz
2 collect2: ld returned 1 exit status
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

  解决:

1 sudo apt-get install lib32z1-dev

  错误5:

1 bison -d  -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
2 /bin/bash: bison: command not found
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127

  解决:

1 sudo apt-get install bison

  错误6:

1 Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
2 /bin/bash: flex: command not found
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127

  解决:

1 sudo apt-get install flex

  错误7:

1 /usr/bin/ld: cannot find -lncurses
2 collect2: ld returned 1 exit status
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 

  解决:

1 sudo apt-get install lib32ncurses5-dev

  错误8:

1 prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error: X11/Xlib.h: No such file or directory
2 compilation terminated.
3 make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o] Error 1

  解决:

1 sudo apt-get install libx11-dev

  错误 9:

1 sh: gperf: not found
2 calling gperf failed: 32512 at ./makeprop.pl line 96.
3 make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25
4 make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'  

  解决:

1 sudo apt-get install gperf

  错误10:

1 development/tools/emulator/opengl/host/libs/Translator/GLcommon/GLDispatch.cpp:22: fatal error: GL/glx.h: No such file or directory compilation terminated.
2 make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon_intermediates/GLDispatch.o] Error 1

  解决方法:

1 sudo apt-get install libgl1-mesa-dev

  错误11:

1 host SharedLib: lib64EGL_translator (out/host/linux-x86/obj/lib/lib64EGL_translator.so)
2  /usr/bin/ld: cannot find -lGL
3  collect2: ld returned 1 exit status
4  make: *** [out/host/linux-x86/obj/lib/lib64EGL_translator.so] Error 1
5  make: *** Waiting for unfinished jobs....

  解决方法 :

1 sudo apt-get install libglu1-mesa-dev 

3.8、/usr/bin/ld: cannot find -lxxx问题解决

   报错信息:

/usr/bin/ld: 找不到 -lz collect2: error: ld returned 1 exit status

  这个地方的报错我百度了很多,虽然有很多博文讲诉,但是均没有解决我的编译报错问题,不知道这些转发的博主们都有没有实测过,反正百度了很多,大都是八九不离十的重复,我几乎都尝试过,都没有解决我的编译报错问题,但可以肯定的是      这个目录下的 /usr/lib/i386-linux-gnu/libX11.so 库版本或者路径没有对应上,解决我报错的方法如下:

1 sudo apt-get install libglu1-mesa-dev -y

   或者:sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

 最后开始真正的编译把

  进入你的安卓代码目录:source ./build/envsetup.sh

              

   lunch 选择 full-eng

              

   选择1就 OK 了

              

   make -j 编译你的代码把,我这里给我的虚拟机配置的是8线程,所以我就用 -j8来编译了,具体 -j 多少要看你为你的虚拟机分配了几核几线程

           

  编译成功后,就可以看到你的安卓代码目录下多了一个 out/ 目录了,里面会有一个 system.img 了,可以烧录到开发板中了

 

  版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2020-06-08,13:19:31
  作者By-----Reverse-xiaoyu----博客园

原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/13063247.html