GCC功能及使用

简介: <h1>功能:</h1> <p><span style="font-size:18px">预处理、编译、连接、汇编</span></p> <p><img src="http://img.blog.csdn.net/20131121155438593" alt=""><br></p> <p><br></p> <p><img src="http://img.blog.csdn.net/

功能:

预处理、编译、连接、汇编





编译过程(从源代码到可执行文件)

预处理:gcc -Ehello.c -o hello.i  //生成预处理后的源文件
汇编:gcc -S hello.i //生成hello.s
目标代码生成:gcc -c hello.s //生成hello.o
连接:gcc hello.o -o hello //生成可以行文件hello





静态库、动态库:

方法一:将hello1.c和hello2.c编译成静态链接库.a
[root@localhost main5]#gcc -c hello1.c hello2.c   
  //将hello1.c和hello2.c分别编译为hello1.o和hello2.o,其中-c选项意为只编译不链接。
[root@localhost main5]#ar -r libhello.a hello1.o hello2.o    
//将hello1.o和hello2.o组合为libhello.a这个静态链接库
[root@localhost main5]#cp libhello.a /usr/lib     
//将libhello.a拷贝到/usr/lib目录下,作为一个系统共享的静态链接库
[root@localhost main5]#gcc -o hello hello.c -lhello  
//将hello.c编译为可执行程序hello,这个过程用到了-lhello选项,这个选项告诉gcc编译器到/usr/lib目录下去找libhello.a的静态链接库
以上的过程类似于windows下的lib静态链接库的编译及调用过程。
方法二:将hello1.o和hello2.o组合成动态链接库.so
[root@localhost main5]#gcc -c -fpic hello1.c hello2.c    
 //将hello1.c和hello2.c编译成hello1.o和hello2.o,-c意为只编译不链接,-fpic意为位置独立代码,指示编译程序生成的代码要适合共享库的内容这样的代码能够根据载入内存的位置计算内部地址。
[root@localhost main5]#gcc -shared hello1.o hello2.o -o hello.so 
  //将hello1.o和hello2.o组合为shared object,即动态链接库
[root@localhost main5]#cp hello.so /usr/lib  
  //将hello.so拷贝到/usr/lib目录下
[root@localhost main5]#gcc -o hello hello.c hello.so  
//将hello.c编译链接为hello的可执行程序,这个过程用到了动态链接库hello.so

目录
相关文章
|
3天前
|
编译器 Linux 开发工具
|
3天前
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
47 0
006.gcc编译器
|
3天前
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
450 1
|
3天前
|
C语言
gcc的简易用法(编译、参数与链接)
【5月更文挑战第14天】gcc的简易用法(编译、参数与链接)。
9 1
|
3天前
|
Unix Java 编译器
安装gcc
【5月更文挑战第14天】安装gcc。
12 1
|
3天前
|
C语言
gcc的简易用法
【5月更文挑战第10天】gcc的简易用法。
16 8
|
3天前
|
C语言
转载 - gcc/ld 动态连接库和静态连接库使用方法
本文介绍了如何在GCC中实现部分程序静态链接、部分动态链接。使用`-Wl`标志传递链接器参数,`-Bstatic`强制链接静态库,`-Bdynamic`强制链接动态库。
40 0
|
3天前
|
编译器 C语言 C++
列举gcc 常见和有用的编译警告选项
列举gcc 常见和有用的编译警告选项
14 0
|
3天前
|
编译器 C语言
gcc编译警告:warning: suggest parentheses around assignment used as truth value
gcc编译警告:warning: suggest parentheses around assignment used as truth value
30 0
|
3天前
|
编译器 Linux C语言
gcc编译器的使用方法
gcc编译器的使用方法
26 1