用gcc进行程序的编译

  在Linux系统上,一个档案能不能被执行看的是有没有可执行的那个权限(x),不过,Linux系统上真正认识的可执行文件其实是二进制文件(binary program),例如/usr/bin/passwd 这些档案就是二进制程序代码。

  怎么产生一个可执行的二进制程序呢?首先写程序,用字处理器写完的程序即源代码,这个源代码就是一般的纯文本文档。在完成源代码的编写后,再来就是将程序代码编译成操作系统看得懂的binary program。编译需要编译程序来动作,经过编译程序的编译与连结之后,就可以产生一个可执行的二进制程序。举例来说,Linux上最标准的程序语言是c,我们用c来写源代码,用Linux上标准的c语言编译程序gcc来编译,然后生成可执行的binary program。

  有时候我们会在程序中引用其他外部子程序,或者利用其他软件提供的函数功能,我们就必须在编译的过程中,将函式库加进去,这样,编译程序可以将所有的程序代码与函式库作一个连结(Link)以产生正确的执行档(可执行binary program档案)。

  • make和configure

  • Tarball

  Tarball档案,其实就是将软件所有的原始代码档案先以tar打包,然后再以压缩技术来压缩,最常见的是gzip,所以tarball档案的扩展名是*.tar.gz或者*tgz。由于bzip2的压缩效率更佳,因此裆名也会变成*.tar.bz2。

  • 打印hello world

(1)直接以gcc编译原始码

[[email protected]]# vi hello.c
[[email protected] Documents]# cat hello.c
#include <stdio.h>
int main(void){
printf("Hello World\n");
}
[[email protected]]# gcc hello.c
[[email protected]]# ll
total 12
-rwxr-xr-x. 1 root root 4643 Jun 14 00:55 a.out   #编译成功的可执行binary program
-rw-r--r--. 1 root root   67 Jun 14 00:55 hello.c
[[email protected]]# ./a.out #执行文档
Hello World

(2)产生目标文件来进行其他动作,而且执行的档名也不用预设的a.out

[[email protected]]# gcc -c hello.c
[[email protected]]# ll hello*
-rw-r--r--. 1 root root  67 Jun 14 00:55 hello.c
-rw-r--r--. 1 root root 852 Jun 14 01:00 hello.o  #产生的目标文件
[[email protected]]# gcc -o hello hello.o
[[email protected]]# ll
total 16
-rwxr-xr-x. 1 root root 4643 Jun 14 01:00 hello   #可执行文件
-rw-r--r--. 1 root root   67 Jun 14 00:55 hello.c
-rw-r--r--. 1 root root  852 Jun 14 01:00 hello.o[[email protected] Documents]# ./hello Hello World

(3)子程序的编译

[[email protected]]# vi thanks.c
[[email protected]]# cat thanks.c
#include <stdio.h>
int main(void)
{
    printf("Hello World\n");
    thanks_2();   #子程序
}
[[email protected]]# vi thanks_2.c
[[email protected]]# cat thanks_2.c
#include <stdio.h>
void thanks_2(void)
{
    printf("Thank you!\n");
}
[[email protected]]# ll thanks*
-rw-r--r--. 1 root root   71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root   83 Jun 14 01:03 thanks.c
[[email protected]]# gcc -c thanks.c thanks_2.c
[[email protected]]# ll thanks*
-rw-r--r--. 1 root root  71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root 856 Jun 14 01:05 thanks_2.o
-rw-r--r--. 1 root root  83 Jun 14 01:03 thanks.c
-rw-r--r--. 1 root root 892 Jun 14 01:05 thanks.o
[[email protected]]# gcc -o thanks thanks.o thanks_2.o
[[email protected]]# ll thanks*
-rwxr-xr-x. 1 root root 4740 Jun 14 01:06 thanks
-rw-r--r--. 1 root root   71 Jun 14 01:05 thanks_2.c
-rw-r--r--. 1 root root  856 Jun 14 01:05 thanks_2.o
-rw-r--r--. 1 root root   83 Jun 14 01:03 thanks.c
-rw-r--r--. 1 root root  892 Jun 14 01:05 thanks.o
[[email protected]]# ./thanks
Hello World
Thank you!
时间: 2024-08-21 18:18:24

用gcc进行程序的编译的相关文章

【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程

一. C程序编译过程 编译过程简单介绍 : C语言的源文件 编译成 可运行文件须要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (assembly) 得到机器码, 连接 (linking) 得到可运行文件; -- 查看每一个步骤的编译细节 : "-E" 相应 预处理, "-S" 相应 编译, "-c" 相应 汇编, "-O" 相应 连接; -- 每一个步骤

gcc 学习笔记(一) - 编译C程序 及 编译过程

一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (assembly) 得到机器码, 连接 (linking) 得到可执行文件; -- 查看每个步骤的编译细节 : "-E" 对应 预处理, "-S" 对应 编译, "-c" 对应 汇编, "-O" 对应 连接; -- 每个步骤对应的工

X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化

X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化 作者:Jochen1986 转载请注明出处:http://blog.csdn.net/youkawa/article/details/45458921 通用寄存器全部扩展到了64位,寄存器名称前面由R开头,如RAX, RBX, RCX, RDX, RSI和RDI: 指令指针(Instruction pointer).基址指针(base pointer)以及堆栈指针(stack pointer)也全部扩展到了64位,这些专用寄存器

Linux C程序的编译

Linux C程序的编译过程 学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. /*test.c     了解C程序的编译*/ #include <stdio.h>int main(void){ printf("Hello World!\n"); return 0;} 对于test.c,我们常用一步编译到位的命令是: gcc -o test test.c  或者  gcc test.c -o test 实际上,上面的这个编译命令包

GCC 4.8.2 编译安装

https://my.oschina.net/u/728245/blog/184550 摘要: GCC 4.8.2 在 CentOS 6.5 下编译安装小记,遇到一些问题并解决. 以前从没有升级过GCC,一直用系统默认的GCC版本,最近在研究好久没有用过的 C, 便有了升级GCC的想发,大致如下. 环境: CentOS-6.5-i386 , gcc-4.4.7 系统必须已经安装有一个编译器,因为 gcc 也是需要编译的 首先 gcc 编译需要三个额外库,下载并按照下面的顺序安装它们,如下:1.

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C++编译器是集成的,编译一般分为四个步骤: 预处理(preprocessing)  ----------------- cpp/ gcc -E  编译(compilation) ------------------ cc1 / gcc -S 汇编(assembly)  ----------------

CentOs之yum详解及程序的编译安装

CentOs之yum详解 yum的地位:yum是rpm的前端管理工具,而且依赖于rpm.  yum仓库:yum repository,仓库里存储了众多rpm包,以及包的相关的元数据文件.yum仓库里会有个repodata目录存在. yum支持的文件服务器类型: ftp://  http:// file:///(本地服务器,例光盘)   /nfs:// 查看yum的信息: [[email protected]]# rpm -q yum ------查看yum命令的安装包是哪个 yum-3.4.3-

ios-(2)第一个C语言程序(理解编译、连接、运行)

一.开发工具的选择 1. 可以用来写代码的工具:记事本.ULtraEdit.Vim.Xcode等. 2. 选择XCode的原因:苹果公司官方提供的开发利器.简化开发的工程.有高亮显示功能. 3. 使用XCode新建一个C程序的源代码文件(扩展名为.c或者.C) # 开发XCode # 新建文件 # 选择文件类型 .c 二.代码编写 1.程序结构 * C程序的结构:由函数组成 # 任何一个C语言程序都市有一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为"函数&q

gcc/g++ 实战之编译过程

gcc和g++分别是GNU(一个开源组织)的c&c++编译器 对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序.gcc可以根据后缀名为.c或.cpp分别按c程序和c++程序来编译,但是g++无论是.c或.cpp都统一按c++程序来编译. 编译阶段,g++会调用gcc,链接阶段通常会用g++来完成,g++在编译的过程中,其实是调用gcc按照c++程序来编译的.即编译工作最终都是由gcc来完成的.这是因为gcc命令不能自动和