博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译可在Android上运行的可执行文件:C/C++交叉编译环境
阅读量:5896 次
发布时间:2019-06-19

本文共 1964 字,大约阅读时间需要 6 分钟。

     X86架构的CPU采用的是复杂指令集(Complex Instruction Set Computer,CICS),而ARM架构的CPU使用的是精简指令集(Reduced Instruction Set Computer,RISC)。由于这两种架构的CPU使用了不同的指令集,因此在X86架构上开发可运行在ARM架构上的程序就必须要使用交叉编译器。 通常交叉编译器和相关工具包含的了很多可执行文件以及大量的共享库及头文件等资源。这些资源的集合称为交叉编译环境。

        在Internet上可以找到集成好的交叉编译环境,Android NDK和Android源代码中也包含的交叉编译环境。当然,如果我们需要一个完全独立的交叉编译环境,可以下载集成好的交叉编译环境,也可以自己制作 (比较复杂,建议读者下载集成好的交叉编译环境)。下面介绍一个CodeSourcery交叉编译环境,这个交叉编译环境直接下载安装就可以安装。

      读者可通过如下的网站访问CodeSourcery下载页面。

    上面的页面并未直接提供CodeSourcery的下载链接,读者可以点击“Download the GNU/Linux Release”链接,并输入Email(建议使用Gmail)、地址等信息,最后点击“Get Lite!”按钮提交信息。如图2-29所示。最后系统会将下载地址发送到刚才输入的Email。

 

进入下载页面,会看到如图2-30所示的不同版本的下载链接,选择最新的版本即可。

                      图2-30  CodeSourcery的不同版本

       进入CodeSourcery的下载页面后,会看到如图2-31所示的下载链接。目前CodeSourcery有Windows和Linux两个版本。本书使用的是第1个(IA32 GNU/Linux Installer)。

 

      Linux版本的安装文件是bin格式,读者可执行下面的命令安装CodeSourcery。其中package表示CodeSourcery的安装文件名。

sh package.bin

    执行上面的命令后,会显示可视化的安装界面,如图2-32所示,读者可按提示安装CodeSourcery。

为了使用方便,建议读者将如下路径加到PATH环境变量中。

 

   /root/compilers/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin

 

    下面编写一个简单的C程序来测试一下这个交叉编译环境。

 
  1. //  first.c   
  2. #include <stdio.h>   
  3. int main()   
  4. {   
  5.     printf("first arm program\n");   
  6.     return 0;   
  7. }   

输入下面的命令编译first.c文件(需要加-static选项)。

# arm-none-linux-gnueabi-gcc -static -o first first.c

输入下面的命令将first文件上传到任意的Android设备的/data/local目录中(没有root权限也可以)。

# adb push first /data/local

使用adb shell命令进入Android设备的控制台,并进入/data/local目录,执行如下的命令

# ./first

     执行上面的命令就会输出“first arm program”信息。first程序在X86架构上运行的Ubuntu Linux中是无法运行的。读者可以试着在Ubuntu Linux中运行first程序,看看会发生什么。

注 意:在安装Code Sourcery的过程中会在/lib目录寻找一个libc.so.6库文件,但在Ubuntu Linux11.04及以上版本/lib目录已经没有libc.so.6库文件了。这个库文件被放在了其他的目录。在32位的Ubuntu Linux中该文件的路径是/lib/i386-linux-gnu/libc.so.6,在64位的Ubuntu Linux中该文件的路径是/lib/x86_64-linux-gnu/libc.so.6。在安装Code Sourcery之前可以使用ln命令为libc.so.6文件在/lib目录建立一个链接。

本文节选至, 接下来几篇文章将详细阐述如何开发ARM架构的Linux驱动,并分别利用android程序、NDK、可执行文件测试Linux驱动。可在ubuntu Linux、Android模拟器和S3C6410开发板(可以选购OK6410-A开发板,需要刷Android)

 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/1122861,如需转载请自行联系原作者

你可能感兴趣的文章
【译】 WebSocket 协议第七章——关闭连接(Closing the Connection)
查看>>
函数柯里化
查看>>
JavaScript高级程序设计(第3版)第3章
查看>>
力扣(LeetCode)31
查看>>
【1】解析与编译
查看>>
利用ES6进行Promise封装总结
查看>>
解决ubuntu 远程连接问题
查看>>
区块链2.0:智能合约
查看>>
深入理解Webpack核心模块Tapable钩子[同步版]
查看>>
jsonp跨域资源引起CORB
查看>>
移动端H5页面阻止图片和文字被选中
查看>>
手写双向链表LinkedList的几个常用功能
查看>>
cross-env使用
查看>>
Fundebug计费标准解释:事件数是如何定义的?
查看>>
一文彻底弄懂 for forEach for-in for-of 的区别
查看>>
《前端十年心路-我把一切告诉你》的书稿大纲&问题收集
查看>>
前嗅ForeSpider教程:运行设置(一)
查看>>
2019
查看>>
CornerStone使用教程
查看>>
客户端检测
查看>>