1.嵌入式C语言编译器

1.1 GCC与gcc

上述两者的区别:

GCC(GUN Compiler Colletion),是指GUN编译器集合包含众多语言得到编译器如C语言(gcc),C++(g++),Java语言(jdk)、D语言(gdc)、等

gcc 则指的是单纯的C语言编译器

当代的嵌入式开发已经和传统的嵌入式开发不同,硬件性能的提升使其越来越接近桌面开发,使用的开发语言也越来越多样,内核和驱动开发使用C语言,应用开发使用gcc/g++/gdc等。

1.2交叉编译

两种开发模式:

A.非嵌入式开发:A(类)机编写(源代码)、编译得到可执行程序,发布给A(类)机运行。

B.嵌入式开发 :A(类)机编写(源代码)、编译得到可执行程序,发布给B(类)机运行。

为何使用交叉编译

嵌入式产品由于资源受限,不能直接在嵌入式产品上进行编程,所以选择在PC主机上进行源码编写和编译,最终生成在嵌入式设备上运行的程序。

交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)

交叉编译特点:

必须使用专用的交叉编译工具链。由于可执行程序不能本地运行调试,因此必须配合一定手段(专用调试器、JTAG调试器、USB下载、串口下载、SD启动、网络共享等)将可执行程序加载到目标嵌入式设备上运行及调试。

gcc如何进行交叉编译?

配置目标主机的编译工具链(如arm-linux),配置工具链的具体版本。

根据具体的目标代码选择相应的工具链版本

正确使用关于硬件体系结构的特殊编译选项

大型企业嵌入式开发环境:

1.3编译过程

我们通常所将的编译器实际上是指广义的编译器,包含下面四个部分:

整个编译过程如下面所示:

预处理器完成:头文件原地展开、宏定义替换、注释删除工作。

编译器(狭义上的):完成各种语言到目标平台的会变文件的翻译工作。

汇编器:将平台回避那文件编译成最终的二进制文件(.O文件)

链接器:将最终的二进制文件按照连接脚本的内容,链接称为最中的可执行文件Linux中为elf文件。

整个过程:源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序

1.4多语言混合开发

多语言混合开发时当×××发中常见的开发方式,优势在于节省人力成本,提高开发效率。

方式一:目标平台汇编文件的统一

行业案例:

方式二:目标平台二进制文件的统一

行业案例:

方式三:利用进程间通信进行协同

行业案例:

1.5 gcc 编译选项

预处理指令: gcc -E file.c -o file.i

编译指令 : gcc -S file.i -o file.s

汇编指令 : gcc -c file.s -o file.o

生成映射文件: gcc test.c -Wl,-Map=test.map (注意逗号后面没有空格)

宏定义:gcc test.c -D 'TEST="PENGCHAO"' gcc test.c -D TEST=110

获取系统头文件路径; gcc -v file.c

获取目标的完整依赖关系:gcc -M test.c

获取目标的部分依赖关系:gcc -MM test.c

制定库文件及库文件的搜索路径

-L 指令库文件搜索路径

-l 指定库文件名

gcc test.c -L -lfunc

静态库生成命令:ar -rc libfunc.a func.o

动态库生成命令:gcc func.c -o func.o -c -fPIC

gcc -o libfunc.so func.o -shared

nm命令也很有用,它可以用来查看一个.a文件中都有哪些符号

ldd命令:作用是可以在一个使用了共享库的程序执行之前解析出这个程序使用了哪些共享库,并且查看这些共享库是否能被找到,能被解析(决定这个程序是否能正确执行)。

注意:动态链接库运行时需要被加载(运行时环境在执行test程序的时候发现他动态链接了libfunc.so,于是乎会去固定目录(/user/lib)尝试加载libfunc.so,如果加载失败则会打印:error while loading shared libraries: libfunc.so: cannot open shared object file: No such file or directory

解决办法:

A.将动态库文件拷贝到系统库文件目录(不推荐)

B.将动态库文件所在目录导出到环境变量LD_LIBRARY_PATH,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path_name

c语言 java 嵌入式_嵌入式C语言编译器相关推荐

  1. c语言有趣代码_为什么C语言永远不会过时?

    直至今天还有人在喊着C语言都过时的语言了,还有什么值得去学的,看现在的python,php等语言现在用起来多简单,谁还去学习老掉牙的C语言,事实真的是这样的吗?笔者作为专门下载了这两种语言的底层源码. ...

  2. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?

    Python作为计算机程序设计语言的其中一种,最初是被设计用于编写自动化脚本(shell),随着版本的不断更新.语言新功能的添加和机器学习的兴起,Python从2017年开始受到广泛关注. Pytho ...

  3. C语言初阶_初识C语言(1)

    凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...

  4. c语言宏定义_掌握C语言,中文编程不是梦

    文/Edward 前面我们在讲节程序编译的时候,编译器做的第一步就是预处理.C语言的预处理,其实是编译器在对整个工程编译之前做的一些文本性质的工作,例如我们经常使用的#include,这就是一个典型的 ...

  5. 精通C语言Java怎么样_作为一个优秀的程序员,真的需要精通C语言吗?

    从事嵌入式开发多年,使用C语言开发已经超过十个年头,除了C语言还用C++,java,python做过项目,程序员的优秀编程语言仅仅占据一部分,而且也不会只是针对C语言,现在很多的编程高手也不懂的C语言 ...

  6. 学嵌入式linux需要会java吗_嵌入式Linux要学哪些东西?你真的造吗?

    www.lupaworld.com/article-251895-1.html 嵌入式Linux要学哪些?一些人总在寻思,怕走了弯路,又怕学的东西离企业需求远.那么今天就请华清远见高级讲师曹大神告诉你 ...

  7. java基础训练_实验1Java语言程序设计基础训练.doc

    实验1Java语言程序设计基础训练 实验1 java语言程序设计基础训练 实验目的 熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支.循环等语句控制程序流程,掌握方法.重载方法的定义和使 ...

  8. 易语言java类_易语言面对对象编程

    易语言面对对象编程---类的创建与使用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++.JAVA等等.易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始 ...

  9. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  10. 1000以内所有同构数java算法_使用c语言求1到1000同构数的代码

    使用c语言求1到1000同构数的代码 发布时间:2020-04-30 14:39:17 来源:亿速云 阅读:679 作者:小新 今天小编给大家分享的是使用c语言求1到1000同构数的代码,相信很多人都 ...

最新文章

  1. Storefront与NetScaler的集成配置 - part1
  2. document.location的用法实例(摘抄自博客园--KoMiles,自己学习的时候记录一下)...
  3. 对计算属性中get和set的理解
  4. Python面向对象进阶及类成员
  5. java8函数式编程 视频_快速掌握Java8 Stream函数式编程技巧
  6. 蓝牙4.0技术分析1-广播者角色
  7. linux运维(五)
  8. 记一次,jvm 内存溢出
  9. idea 检测 重复代码_IDEA关掉重复代码波浪线
  10. 搜索引擎的那些事(中文分词)
  11. Android安全开发之ZIP文件目录遍历
  12. MPLS virtual private network OptionA实验(华为设备)
  13. lstanyu+大米云,我的云
  14. 屁屁岚分析开源项目3——贴片机飞达控制板
  15. C++进阶与拔高(五)(C++ STL utility和iterator)
  16. 无线通信基础知识13:数字通信之信道编码
  17. openstack资料-陈沙克整理
  18. 虚拟主播合成视频使用教程
  19. HTTP/1.1(消息格式、连接管理、条件请求、范围请求、缓存、身份验证)
  20. scratch 学习网址:

热门文章

  1. Jmeter 中的BeanShell使用
  2. java 水晶报表教程_WEB开发中水晶报表的使用心得
  3. c语言自学路线图,C语言的知识体系图,C语言学习路线图
  4. ie7/8卸载工具 降级到IE6
  5. 计算机声卡的步骤,声卡调试教程
  6. rapidminer基础使用
  7. KindEditor的简单应用
  8. 前置加加与后置加加的区别
  9. 3dmax导入模型,解决贴图不显示的问题
  10. 网页中透明Flash的设置