linux C编程之gcc的使用

前言:我们知道GCC是C语言的编译器,使用GCC由C语言源文件生成可执行文件的过程,要经过四个相互关联 的步骤:(这里以hello.c为源文件名)

预处理:preprocessing   将一些宏展开,其中包括头文件的展开                                    执行的命令:   gcc -E hello.c -o hello.i      (预处理后的文件后缀是i)

汇编:assembly          将预处理文件生成汇编代码                                                       执行的命令:   gcc -S hello.i -o  hello.s     (汇编处理后的文件后缀是s)

编译:complicationg   将汇编代码生成二进制文件                                                       执行的命令:   gcc -c hello.s  -o hello.o     (编译处理后的文件后缀是 o)

链接:linking               将生成的二进制文件和库链接 生成可执行二进制文件              执行的命令:   gcc     hello.o -c hello          (可执行文件名指定为helli)

上面四个步骤可以用一个命令代替:   gcc hello.c  -o hello

gcc命令的格式:   gcc [选项]     要编译的文件   【选项】  【目标文件】

常用选项

选项                                               说明

-c                                                     只激活预处理、编译和汇编

-S                                                    只激活预处理和编译,把文件编译成汇编代码

-E                                                    只激活预处理

-o                                                    指定目标文件

-g                                                    编译的时候,产生调试信息

-static                                             将产生一个和static库连接生成的可执行文件,在没有使用该选项的情况下,默认是使用共享库,

-Wall                                               打印所有警告信息

-w                                                   关闭所有警告信息

-werror                                           把所有警告信息转化为错误信息,即发生警告时终止编译过程

-include file                                    包含该文件的代码  相当于#include<file>  ,gcc hello.c -include /root/hell.h

-immacros file                                将制定文件的宏包含进来

-Dmacro                                        相当于#define macro

-Dmacro=defn                               相当于#define macro=defn

-Umacro                                        相当于#undef  macro

-C                                                  在预处理的时候不删除注释信息

-llibiray                                          编译的时候使用libray库

-O0~O3                                         编译优化的四个等级  -O0代表不优化

-Ldir                                              制定编译时的库搜索路径

linux C编程之gcc的使用,布布扣,bubuko.com

时间: 2024-10-11 22:32:17

linux C编程之gcc的使用的相关文章

Linux环境编程之IPC进程间通信(五):Posix消息队列1

对于管道和FIFO来说,必须应该先有读取者存在,否则先有写入者是没有意义的.而消息队列则不同,它是一个消息链表,有足够写权限的线程可往别的队列中放置消息,有足够读权限的线程可从队列中取走消息.每个消息都是一个记录,它由发送者赋予一个优先级.在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达.消息队列是随内核的持续性,一个进程可以往某个队列写入一些消息,然后终止,再让另外一个进程在以后的某个时刻读出这些消息.这跟管道和FIFO不一样,当一个管道或FIFO的最后一次关闭时

Linux环境编程之IPC进程间通信(三):FIFO

管道是没有名字的,因此它只能在有亲缘关系的进程间使用,给管道加上名字,我们称之为有名管道FIFO,当然FIFO与管道之间不止有没有名字的区别,还有其他区别下面会提到.与管道类似的是,FIFO是一个单向(半双工)数据流.不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程之间访问同一个FIFO.FIFO是一种文件类型.stat结构成员st_mode的编码指明文件是否是FIFO类型,可以用S_ISFIFO宏对此进行测试. FIFO由mkfifo函数创建,它已经隐含指定了O_CR

Linux环境编程之IPC进程间通信(四):管道和FIFO比较

系统加于管道和FIFO的唯一限制是: 1.OPEN_MAX 一个进程在任意时刻打开的最大描述符数.可以通过调用sysconf函数查询. 2.PIPE_BUF 可原子地写往一个管道或FIFO的最大数据量.Posix任务它是一个路径名变量,它的值可以随指定的路径名而变化,因为不同的路径名可以落在不同文件系统上,而这些文件系统可能有不同的特征.所以PIPE_BUF可通过pathconf函数取得. pipeconf.c #include <stdio.h> #include <stdlib.h&

Linux环境编程之IPC进程间通信(二):管道

管道作为最古老的进程间通信方法,它有以下几个特点: 1.在所有的UNIX实现中都存在. 2.没有名字,因此只能由有亲缘关系的进程使用. 3.它由函数pipe创建,read和write函数访问,但只提供单路(单向)数据流. <span style="font-size:14px;">#include <unistd.h> int pipe(int fd[2]); 返回:若成功则为0,若出错则为-1</span> 经由参数fd返回两个文件描述符:fd[0

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

linux网络编程之TCP/IP基础篇(一)

从今天起,将会接触到网络编程,平台是linux,实现语言C语言,最后将会实现一个简易的miniftp服务器. 主要的内容安排为:linux网络编程之TCP/IP基础篇,SOCKET编程篇,进程间通信篇,线程篇,实战ftp篇. 1.ISO/OSI参考模型:open system interconnection开放系统互联模型是由OSI(international organization for standardization )国际标准化组织定义的网络分层模型,共七层. 各层的具体含义: 物理层

Linux多任务编程之二:fork()函数及其基础实验(转)

来源:CSDN  作者:王文松 转自Linux公社 fork()函数 在 Linux 中创建一个新进程的唯一方法是使用fork()函数.fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看. 函数说明 fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程.使用fork()函数得到的子进程是父进程的 一个复制品,它从父进程处继承了整个进程的地址空间,包括进

Linux C编程之二:Linux基础

1.Linux的特点 (1)Linux就是一个操作系统(作为用户和计算机之间接口的软件程序) 注:操作系统的功能:命令解释,进程管理,内存管理,输入输出(I/O)操作和外围设备管理,文件管理 (2)特点:具有贵族血统 开放性,多用户,多任务,出色的稳定性和速度性能,丰富的网络性能,可靠的系统安全,可移植性(适合大多数计算机平台) (3)linux关机方法 2.Linux系统结构 硬件 > 内核 > 接口(shell)> 外层应用程序 3.Linux的目录结构 存放命令的目录 :/bin

Linux网络编程之socket相关结构体

Linux中的网络编程是通过 Socket (套接字)实现. Socket有三种类型: 流式套接字(SOCK_STREAM) 流式套接字可以提供可靠的.面向连接的通讯流,它使用TCP协议.TCP保证了数据传输的正确性和顺序性. 数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP. 原始套接字(SOCK_RAM) 原始套接字允许使用IP协议,主要用于新的网络协议的测试等. Socket