嵌入式Linux编译器gcc使用
2012-07-30 17:54
309 查看
from: http://blog.csdn.net/jyjmc/article/details/5278130
At first, GCC is used for GNU C Compiler. At present,it supports JAVA Ada C++ and so on.
GCC编译流程分为:
1.Pre-Processing(预处理)
gcc -E -o hello.i hello.c
选项-E 使得编译器在预处理结束时停止编译
选项-o 指定GCC的输出结果
.i/.ii 经过预处理的C/C++源程序
2.Compiling(编译)
gcc -S -o hello.s hello.i
选项-S 使得编译器在编译结束,进行汇编之前停止编译
.s 汇编语言源程序
3.Assembling (汇编)
gcc -c hello.s hello.o
选项-c 汇编阶段将汇编代码转为二进制目标代码
4.Linking(链接)
gcc hello.o -o hello
将程序中用到的库函数如printf的实现从默认的路径"/usr/lib/libc.so.6"链接过来
现在即可运行可执行文件hello
GCC警告提示:
1.Wall类警告提示
占GCC警告选项90%以上,建议使用选项-Wall,即打开所有警告:
gcc -Wall wrong.c -o wrong
2.非Wall类警告提示
"-ansi" 强制GCC生成的标准语法所要求的告警信息,并不保证所有没有警告的程序都是符合ANSI C标准
”-pedantic“ 允许发出ANSI C标准所列的全部警告信息,保证所有没有警告的程序都是符合ANSI C标准
gcc -pedantic wrong.c -o wrong
GCC使用库函数
Linux中有3种库函数形式:
1.静态 后缀为.a
静态库的代码在编译时就已经连接到应用程序中
2.共享 后缀为.so和版本号
在程序开始运行时才载入
3.动态 后缀为.so和版本号
在程序中的语句需要使用该函数时才调用,调用结束后释放动态库所占内存
动态库和共享库只包含对库函数的引用,代码规模较小
Linux系统所用的库都放在 /usr/lib 和 /lib 目录下
库文件的路径通常不在系统默认路径下,则需要使用调用路径选项来指定相关库文件的位置
1. ” -I dir “ 在头文件的搜索路径列表中添加 dir 目录
若"/root/workplace/gcc"下包括hello.h , hello.c:
"# include <hello.h> ..."
gcc hello.c -I /root/workplace/gcc -o hello
<>表示在系统默认路径中搜索头文件,采用#include ”hello.h“则不用加 -I选项
2. ”-L dir“ 与-I dir类似,区别在于”-L“指明库文件的路径
dir中不能包括文件名,只是指定了路径
使用3种类型链接库
用选项”-l“(小写的L)加库名称,如libm.a或libm.so 在调用时都写作”-lm“
Linux系统默认采用动态链接的方式 ,若动态静态库重名,则需要显示包含后缀"-llibm.a"
GCC代码优化: -On选项 n常取0~3 n越大优化工作越多
优化选项可以加速代码运行速度,但加大调试难度。一般在最终release的时候考虑优化
以上为《嵌入式LinuxC编程入门(第二版)》ISBN 978-7-115-21281-8 学习整理
At first, GCC is used for GNU C Compiler. At present,it supports JAVA Ada C++ and so on.
GCC编译流程分为:
1.Pre-Processing(预处理)
gcc -E -o hello.i hello.c
选项-E 使得编译器在预处理结束时停止编译
选项-o 指定GCC的输出结果
.i/.ii 经过预处理的C/C++源程序
2.Compiling(编译)
gcc -S -o hello.s hello.i
选项-S 使得编译器在编译结束,进行汇编之前停止编译
.s 汇编语言源程序
3.Assembling (汇编)
gcc -c hello.s hello.o
选项-c 汇编阶段将汇编代码转为二进制目标代码
4.Linking(链接)
gcc hello.o -o hello
将程序中用到的库函数如printf的实现从默认的路径"/usr/lib/libc.so.6"链接过来
现在即可运行可执行文件hello
GCC警告提示:
1.Wall类警告提示
占GCC警告选项90%以上,建议使用选项-Wall,即打开所有警告:
gcc -Wall wrong.c -o wrong
2.非Wall类警告提示
"-ansi" 强制GCC生成的标准语法所要求的告警信息,并不保证所有没有警告的程序都是符合ANSI C标准
”-pedantic“ 允许发出ANSI C标准所列的全部警告信息,保证所有没有警告的程序都是符合ANSI C标准
gcc -pedantic wrong.c -o wrong
GCC使用库函数
Linux中有3种库函数形式:
1.静态 后缀为.a
静态库的代码在编译时就已经连接到应用程序中
2.共享 后缀为.so和版本号
在程序开始运行时才载入
3.动态 后缀为.so和版本号
在程序中的语句需要使用该函数时才调用,调用结束后释放动态库所占内存
动态库和共享库只包含对库函数的引用,代码规模较小
Linux系统所用的库都放在 /usr/lib 和 /lib 目录下
库文件的路径通常不在系统默认路径下,则需要使用调用路径选项来指定相关库文件的位置
1. ” -I dir “ 在头文件的搜索路径列表中添加 dir 目录
若"/root/workplace/gcc"下包括hello.h , hello.c:
"# include <hello.h> ..."
gcc hello.c -I /root/workplace/gcc -o hello
<>表示在系统默认路径中搜索头文件,采用#include ”hello.h“则不用加 -I选项
2. ”-L dir“ 与-I dir类似,区别在于”-L“指明库文件的路径
dir中不能包括文件名,只是指定了路径
使用3种类型链接库
用选项”-l“(小写的L)加库名称,如libm.a或libm.so 在调用时都写作”-lm“
Linux系统默认采用动态链接的方式 ,若动态静态库重名,则需要显示包含后缀"-llibm.a"
GCC代码优化: -On选项 n常取0~3 n越大优化工作越多
优化选项可以加速代码运行速度,但加大调试难度。一般在最终release的时候考虑优化
以上为《嵌入式LinuxC编程入门(第二版)》ISBN 978-7-115-21281-8 学习整理
相关文章推荐
- 嵌入式Linux编译器gcc使用
- Linux之C编译器gcc和makefile使用简介
- Ubuntu 16.04(64bit)嵌入式交叉编译环境搭建arm-linux-gcc使用
- 【Linux】linux下gcc编译器的使用
- 嵌入式Linux编译器GCC编译流程
- Linux入门gcc编译器的使用简易介绍
- Linux下编程工具的使用(2) - GCC编译器
- 嵌入式开发之GCC编译器使用
- Linux 开发环境搭建与使用——Linux 编译器之 GCC
- Linux下gcc编译器生成和使用静态库和动态库
- linux下gcc编译器的使用
- Linux gcc编译器常用命令和使用
- 嵌入式Linux开发工具之gcc编译器
- linux下gcc编译器的使用(网上转载)
- Linux下gcc编译器的使用总结
- 嵌入式Linux编译器gcc
- linux下gcc编译器的使用
- configure中arm-linux-gcc编译器使用
- gcc编译器使用方法 arm-linux-gcc常用参数
- linux应用之gcc编译器的安装及使用