虽然windows上也可以进行交叉编译,但是有很多库在Linux编译会简单很多,而且也更快一些,当然Mac上也可以编译,不过这篇是总结从0开始虚拟机上配置Linux的交叉编译环境,这会是一个系列的文章,所谓必知必会是NDK开发者所应该知道一些知识,此系列文章基链接:
首先到官网下载VMware 虚拟机。
首先到Ubuntu官网下载Linux系统ubuntu-18.04.1-desktop-amd64.iso镜像文件,然后打开VMware——>创建新的虚拟机——>自定义(高级)——>默认点击下一步
根据自己的系统选择将要正确的版本,我机子是64位的而且将要安装Ubuntu
然后下一步定义虚拟机的名称和保存位置——>处理器配置——>虚拟机内存(处理器配置和内存都可以先默认,以后根据实际情况自行修改)——>网络类型选择使用网络地址转换NAT模式——>SCSI选择推荐选项——>虚拟磁盘类型选择推荐选项——>选择磁盘
分配磁盘大小并选择将虚拟磁盘存储为单个文件——>下一步——>指定vmdk存储的位置
点击完成,然后装载下载好的Ubuntu镜像ISO文件,点击完成。
然后开启此虚拟机,然后等待片刻会自动进入到Ubuntu系统安装界面(若没有进入就继续等待或者重新挂载)
点击安装Ubuntu——>继续——>现在安装——>
选择键盘布局
设置用户名密码就开始自动安装了,等待…然后重启,切回
E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?
解决方案,依次执行终端命令
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
启动系统之后,在菜单栏虚拟机——>安装VMware Tools然后系统会自动下载安装包并加载到CD驱动器中,使用终端打开,第一次使用root用户的话得通过sudo passwd root 设置root用户的密码,只有拥有root权限才可以使用解压命令
tar xvf VMwareTools-10.2.5-8068393.tar.gz -C /usr/local/ 解压到/usr/local目录下(任何目录都可)
解压完毕之后再进入到解压目录下执行vm-ware install.pl脚本,然后一路回车进行安装即可,安装成功之后你需要从CD驱动器中弹出,并且在菜单栏虚拟机下会看到重新安装VMware Tools。
在安装samba前为了便于操作,可能还需要安装些其他软件,比如说vim、net-tools等,在Linux下安装软件很简单直接使用sudo apt-get install samba
安装samba之后,需要进行一些配置工作,通过命令vim /etc/samba/smb.conf 使用vim 编辑smb.conf配置文件,白色覆盖区域[share]部分即所谓的共享节点(这个名词我不确定是否规范,是我自己的理解的)为需要手动添加配置信息并保存。
[share]
comment = share with windows
browseable = yes
writable = yes
valid users = cmo
path = /home/cmo
guest ok = no
保存完毕之后,还需要给samba使用 smbpasswd -a cmo添加用户(cmo即为我Linux的用户名,要确保用户拥有Linux下对应path的权限,然后在Windows上通过该用户登录,当然也可以添加多个共享节点来实现多用户多目录共享,但同一个共享路径,同一时间只能通过一个用户登录共享)
,再通过service smbd restart重启samba服务,至此Linux 所有配置共享工作已经全部完成,只需要在Windows下添加上对应的网络磁盘地址即可,在我的电脑上右键——>映射网络驱动器
使用ifconfig 查看网络地址信息,然后inet内网地址就是我们将在windows映射的
点击完成,最终共享的所有工作完成。
很多软件都是需要SSH协议来进行远程访问的,比如WinSCP、XShell等,而Ubuntu默认是没有安装的,所以需要通过 apt-get install ssh 安装SSH,另外可以通过netstat -anptu命令查看端口号
gcc全称GNU C编译器,原本只能处理C语言,但很快扩展也可以支持变得可处理C++。(GNU计划的目标是创建一套完全自由的操作系统);g++全称GNU c++编译器,虽然gcc和g++都能够编译c/c++,但是编译时候行为不同:对于后缀为**.c的源文件,gcc把它当作是C程序而g++当作C++程序**;后缀为**.cpp的两者都会认为是c++程序**。而且g++会自动链接c++标准库stl,gcc不会,gcc也不会定义__cplusplus宏,而g++会。另外clang也是一个编译器,与gcc对比,它具有编译速度更快、编译产出更小等优点,但是某些软件在使用clang编译时候因为源码中内容的问题会出现错误。
gcc、g++编译器简而言之就是用于把出C/C++ 源文件编译成可以执行的文件,安装也很简单只要分别执行命令apt-get install gcc和apt-get install g++(当然也可以使用apt install build-essential 命令一并安装gcc、g++与make)即可,安装完毕之后就可以使用编译器编译C/C++ 源文件了,而用于编译NDK的话,通常是使用NDK 中对应的gcc/g++ 编译器
和Windows不同,Linux环境变量配置需要使用 export 声明。
export PATH=${PATH}:java/bin:android/platform-tools
比如首先定义一个全局的环境变量NDK和在"$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin"目录中包含了arm-linux-androideabi-gcc、arm-linux-androideabi-g++等交叉编译工具,不过交叉编译工具的路径根据NDK版本和编译工具版本的不同会有所变化。
export NDK=<NDK目录>
export PATH=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
....
如果直接在终端中输入命令,则设置PATH环境变量的值,但其作用范围仅限于当前会话即临时环境变量,使用$来引用环境变量。在Linux中配置环境变量,也可以直接修改以下文件profile或者bashrc或者bash_profile (其中**/etc/ 是系统全局环境变量设定,~/是用户私有环境变量设定**)以修改/etc/profile文件为例:
使用命令wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip下载最新稳定版ndk-r16b
下载完成之后使用解压命令unzip android-ndk-r16b-linux-x86_64.zip进行解压
原则上解压完毕之后就可以在Linux上使用NDK进行开发了,NDK 目录结构概图如下:
未完待续……