Linux下编译调试c程序
实验4:Linux C语言编程和调试
实验报告4课程名称:Linux基础实验名称:Linux C语言编程和调试学生姓名:班级:学号:指导老师:钱振江成绩:一、实验目的1.掌握Linux环境下C程序的编辑、编译、运行等操作;2.掌握多文件的编译及连接;3.初步掌握gdb调试方法;二、实验任务与要求1.在Linux环境下C程序的编辑、编译与运行;2.多文件的编译及连接;3.应用gdb调试程序;4.随机数的应用;三、实验工具与准备计算机PC机,Linux Ubuntu操作系统四、实验步骤与操作指导1.调试下列程序。
程序通过创建一个小型函数库,它包含两个函数,然后在一个示例程序中调用其中一个函数。
这两个函数分别是pro1和pro2。
按下面步骤生成函数库及测试函数库。
步骤1 为两个函数分别创建各自的源文件(将它们分别命名为pro1.c和pro2.c)。
[root@localhost root]# vi pro1.c#include <sdtio.h>void pro1(int arg){printf(“hello:%d\n”,arg) ;}[root@localhost root]# vi pro2.c#include <sdtio.h>void pro2(char *arg){printf(“您好:%s\n”,arg) ;}步骤2 分别编译这两个文件,生成要包含在库文件中的目标文件。
这通过调用带有-c 选项的gcc编译器来实现,-c选项的作用是阻止编译器创建一个完整的程序,gcc将把源程序编译成目标程序,文件名为以.o结尾。
如果此时试图创建一个完整的程序将不会成功,因为还未定义main函数。
[root@localhost root]# gcc -c pro1.c pro2.c[root@localhost root]# ls *.opro1.o pro2.o步骤3 现在编写一个调用pro2函数的程序。
首先,为库文件创建一个头文件lib.h。
linux下c语言使用编译与调试试验
实验四:LINUX 下C语言使用、编译与调试实验一、目的:1、练习并掌握Linux提供的vi编辑器来编译C程序2、学会利用gcc、gdb编译、调试C程序3、学会使用make工具二、内容1、编写C语言程序,用gcc编译并观察编译后的结果,运行生成的可执行文件。
2、利用gdb调试程序。
3、学习编写makefile,并进行编译。
三、操作1、文件编辑器vi进入vi,直接执行vi编辑程序。
例:# vitest.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。
编辑完成后,使用者可决定是否要取代原来旧有的文件。
1) vi的工作模式(1)输入模式输入以下命令即可进入vi输入模式:a 在光标之后加入资料A 在该行之末加入资料i 在光标之前加入资料I 在该行之首加入资料o 新增一行于该行之下O 新增一行于该行之上(2)命令模式在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi::q! 离开vi,并放弃刚在缓冲区内编辑的内容:wq 将缓冲区内的资料写入磁盘中,并离开viZZ 同wq:x 同wq:w 将缓冲区内的资料写入磁盘中,但并不离开vi:q 离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(3)命令模式下光标的移动h 左移一个字符j 下移一个字符k 上移一个字符l 右移一个字符0(零)移至该行的行首$ 移至该行的行尾^ 移至该行的第一个字符处H 移至窗口的第一行M 移至窗口中间那一行L 移至窗口的最后一行G 移至该文件的最后一行W, w 下一个单词(W 忽略符号)B, b 上一个单词(B 忽略符号)(4) 命令模式下的编辑命令dd 删除当前光标所在行yy 复制当前光标所在行p 将复制的内容粘贴在光标所在的位置后P 将复制的内容粘贴在光标所在的位置前x 删除当前光标字符X 删除当前光标之前字符u 撤消·重做2、GNU C编译器1) 使用gcc通常后跟一些选项和文件名来使用gcc编译器。
请简述linux环境下c程序的编译执行过程。
请简述linux环境下c程序的编译执行过程。
在Linux环境下,C程序的编译执行过程包括预处理、编译、汇编、链接和执行五个步骤。
下面将会对每个步骤进行详细的说明。
1.预处理:预处理是在编译前对源代码进行处理的阶段。
预处理器将执行一系列操作,包括宏展开、头文件包含、条件编译等。
预处理的结果是生成一个经过处理的输出文件,通常是一个带有".i"扩展名的文件,也称为预处理文件。
在Linux环境下可以使用以下命令对源文件进行预处理:```bashgcc -E source.c -o output.i```2.编译:编译是将预处理文件转换为汇编代码的阶段。
编译器将预处理文件作为输入,对其进行词法分析、语法分析和语义分析,并将其转换成汇编代码。
编译的结果是一个带有".s"扩展名的文件,也称为汇编代码文件。
```bashgcc -S output.i -o output.s```3.汇编:汇编是将汇编代码转换为机器码的阶段。
汇编器将汇编代码作为输入,将其转换为二进制机器指令,生成一个带有".o"扩展名的目标文件(也称为目标代码文件)。
在Linux环境下可以使用以下命令将汇编代码转换为目标代码:```bashgcc -c output.s -o output.o```4.链接:链接是将目标文件与库文件进行合并,并解析所有的外部符号引用的过程。
链接器将目标文件作为输入,将其与系统库文件和用户库文件合并,生成一个可执行文件。
链接的结果是一个可执行文件,没有扩展名。
```bashgcc output.o -o executable```5.执行:执行是将可执行文件加载到内存中,并运行程序的过程。
操作系统将可执行文件加载到内存中的进程空间,然后执行程序的入口点,开始运行程序。
程序会根据代码的逻辑执行相应的操作,最终会得到预期的结果。
除了以上的基本编译执行过程外,还可以使用Makefile来管理项目的编译过程。
Linux编程使用gcc编译C程序
Linux编程使⽤gcc编译C程序
Linux编程使⽤gcc编译C程序
上⾯介绍了gcc编译器进⾏C语⾔源代码编译时的⼀些基础知识,将以多个实例来介绍如何使⽤gcc编译器对C语⾔进⾏编译。
并介绍gcc编译器存在的错误类型及解决错误的基本⽅法。
1.使⽤gcc编译C语⾔代码
从上⾯介绍可以知道使⽤gcc编译器编译C语⾔代码时的命令为gcc,⾸先创建⼀个test.c⽂件,并在该⽂件中写⼊以下内容:
接下开打开终端窗⼝,进⼊到该⽂件所在⽬录,并输⼊下⾯的命令:
上述命令执⾏完毕后,会在该源⽂件所在⽬录下⽣成⼀个新⽂件,该⽂件名称为mytest,该⽂件就是编译过的可执⾏⽂件,在终端容器中再次输⼊以下命令:
该命令执⾏编译后的⽂件,源⽂件中程序运⾏结果在终端窗⼝中显⽰出来:
通过上⾯步骤可以看到使⽤gcc编译器的⼀般⽅法,下⾯再列举⼀例来熟悉
打开终端窗⼝使⽤下⾯的命令对该⽂件进⾏编译:。
Linux系统中如何编译C程序
linux下对C代码的编译 • 在linux 下对C代码的编译时极其简单 的,但是,不能忘记步骤。 要进入自己所要的目录:cd 文件名 如果要是返回上级目录:cd …… 要查看下面的子目录:ls 或者ll 建立新目录:mkdir 文件名 删除空目录: rmdir 文件名 非空的rm 编译 :gcc -o test test.c 输出:。/test
• • • • • • •
Linux平台下关于GCC编译及使用的方法
• 警告: • 1、-pedantic 选项,那么使用了扩展语法的 地方将产生相应的警告信息 • 2、-Wall 使用它能够使GCC产生尽可能多的 警告信息 • 3、-Werror,它要求GCC将所有的警告当成 错误进行处理 • 库依赖: • 1、Linux下的大多数函数都默认: • 头文件放到/usr/include/目录下 • 而库文件则放到/usr/lib/目录下
•
• • •
• • •
Linux下的库文件在命名时有一个约定,那就是应该 以lib三个字母开头,由于所有的库文件都遵循了同样 的规范,因此在用-l选项指定链接的库文件名时可以 省去lib三个字母,也就是说GCC在对-lfoo进行处理 时,会自动去链接名为libfoo.so的文件。 -static选项,强制使用静态链接库 如果在/home/xiaowp/lib/目录下有链接时所需要的 库文件libfoo.so和libfoo.a 为了让GCC在链接时只用到静态链接库,可以使 用下面的命令: gcc -o test test.c -L /home/xiaowp/lib -static -lfoo 选项-O可以告诉GCC同时减小代码的长度和执行 时间,其效果等价于-O1. 在这一级别上能够进行的优化类型虽然取决于目标 处理器,但一般都会包括线程跳转(Thread Jump) 和延迟退栈(Deferred Stack Pops)两种优化。
如何在Linux终端中调试程序
如何在Linux终端中调试程序在Linux系统中,终端是开发者和系统管理员经常使用的重要工具。
通过终端,我们可以执行各种命令和操作,包括程序的编译、运行和调试。
本文将介绍在Linux终端中如何进行程序调试的方法和技巧。
一、安装调试工具要在Linux终端中进行程序调试,首先需要安装相应的调试工具。
常用的调试工具包括GDB (GNU调试器)和LLDB (LLVM调试器)。
这两个工具都是开源的,可以通过包管理器来安装。
1. 使用GDB进行程序调试GDB是Linux中最常用的调试工具之一。
下面是GDB的安装方法:```$ sudo apt-get install gdb```安装完成后,可以通过以下命令来验证安装是否成功:```$ gdb --version```2. 使用LLDB进行程序调试LLDB是一个高级的调试工具,它可以用于多种编程语言,包括C、C++和Objective-C。
下面是LLDB的安装方法:```$ sudo apt-get install lldb```安装完成后,可以通过以下命令来验证安装是否成功:```$ lldb --version```二、编译程序时的调试选项在Linux终端中调试程序时,为了方便跟踪问题和定位错误,可以在编译程序时添加调试选项。
常用的调试选项包括-g(生成调试信息)、-Wall(显示警告信息)和-O0(禁用优化)。
例如,使用gcc编译C程序时可以使用以下命令:```$ gcc -g -Wall -O0 program.c -o program```三、使用GDB进行程序调试1. 启动GDB调试器通过以下命令启动GDB调试器,并加载需要调试的程序:```$ gdb program```2. 设置断点在GDB中,可以使用break命令设置断点,以便在程序执行到指定位置时暂停。
例如,要在函数的第10行设置断点,可以使用以下命令:```(gdb) break 10```3. 执行程序使用run命令执行程序,并在断点处停止:```(gdb) run```4. 调试程序一旦程序在断点处停止,可以使用以下命令进行调试:- 继续执行:使用continue命令继续执行程序。
基于Linux操作系统的C语言编译和调试方法解析
基于Linux操作系统的C语言编译和调试方法解析摘要:文章先介绍了GCC编译器相关内容,包括GCC编译程序和GCC编译选项,随后介绍了GDB调试程序相关内容,包括GDB具体操作和GDB基础命令,最后介绍了C语言编写中的注意事项,希望能给相关人士提供有效参考。
关键词:Linux操作系统;C语言编译;调试方法引言:C语言拥有较强的表达能力、应用范围较广、功能丰富,同时目标程序的运行效率相对较高,拥有良好的可移植性,不但拥有高级语言应用优势,同时还兼具低语言特征。
为此C语言也是当下推广速度最快的计算机语言。
一、GCC编译器(一)GCC编译程序Linux OS系统中应用的C编译器主要是GCC编译器,如果初步了解其他控制系统中的某种C编译器,则便会快速掌握GCC操作。
结合相关编辑软件编制完成某一C语言源程序后,会直接进入下面几项环节,分别是程序运行、连接、开展编译工作、程序输入等。
比如在设计C源程序的filel.c时,通过编译后可以或得filel.o的目标文件,并和系统中的库函数实施有效连接,最终获得filel.out可执行文件,并开始启动filel.out文件运行。
GCC编译器执行命令的具体用法如下所示:GCC[选项][文件名]GCC编译程序中如果不存在任何选项的条件下,便会自动生成一种a.out可执行文件,比如以下命令会在现有目录下生成一种称作a.out的文件,相关文件名为gcc filel.c。
如果想要改变系统默认文件名a.out,在开展编译工作中相关技术人员可以自主指定相应的可执行文件名,从而对系统自动生成的a.out文件实施有效替换,比如可以把filel.c名字的C程序改编为filel.out名字的可执行文件,并按照下方命令参考输入:gcc-o filel.out filel.c。
操作中需要注意应用-0选项过程中,后面应该紧跟一种文件名[1]。
(二)GCC编译选项GCC编译选项多种多样,其中仅有少部分会频繁选用,除了相关选项之外,还包含各种不会经常应用的选项,为此可以输入man gcc,并查阅其应用方法。
Linux下C语言程序的编译与调试实验报告
Linux下C语言程序的编译调试实验学院:电子信息工程学院专业:通信工程*名:***学号:********指导老师:周围老师完成时间:2013年6月3日一、实验目的1. 熟悉Linux下C语言编译调试环境。
2. 学会使用gcc编译C程序。
3. 学会使用gdb调试C程序。
二、实验内容1. 在Linux下,编写程序factorize.c,功能如下:输入一个int型整数,输出其因式分解结果。
2. 编译运行,生成可执行文件。
3. 用gdb调试该程序,找到错误并修改。
三、实验软件环境GCCGCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。
GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。
GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。
GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。
GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。
GCC很快地扩展,并支持处理C++。
后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。
GDBGDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
(断点可以是条件表达式)。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
第三讲:Linux下C程序编译和调试20100314
• • • •
汇文教育
HUIWEN EDUCATION
GDB调试器的使用
以下程序是汉诺塔的源程序:
#include "stdio.h" main() { void hanoi(int,char,char,char); int m; printf("input the number of disks:"); scanf("%d",&m); printf("The step to moving %d disks:\n",m); hanoi(m,'A','B','C'); } void hanoi(int n,char a,char b,char c) { void move(char,char); if(n==1) move(a,c); else { hanoi(n-1,a,c,b); move(a,c); hanoi(n-1,b,a,c); } } void move(char x,char y) { printf("%c-->%c\n",x,y); }
游戏规则: For a cell that is ‘alive': 1, Each cell with one or no neighbors dies, as if by loneliness. 2, Each cell with four or more neighbors dies, as if by overpopulation. 3, Each cell with two or three neighbors survives. For a cell that is ‘dead' 4, Each cell with three neighbors becomes alive.
linux 下c 程序的编写、编译与运行方法
linux 下c 程序的编写、编译与运行方法摘要:1. Linux 下的C 语言编程环境搭建2.C 程序的编写方法3.C 程序的编译与运行方法4.实用技巧与注意事项正文:**一、Linux 下的C 语言编程环境搭建**在Linux 系统中,我们可以使用自带的编译器(如GCC)进行C 语言编程。
首先,确保系统已安装了GCC 编译器。
可以通过以下命令进行检查:```bashgcc --version```如果未安装,可以使用以下命令进行安装:```bashsudo apt-get install gcc```**二、C 程序的编写方法**1.使用文本编辑器编写代码,如Vim、Emacs 等。
2.编写代码时,注意使用宏定义和预处理指令,如`#include`、`#define` 等。
3.编写完代码后,保存文件为 .c 扩展名,例如:`main.c`。
**三、C 程序的编译与运行方法**1.使用`gcc` 编译器编译C 程序。
编译命令格式如下:```bashgcc [options] filename.c -o output_file```其中,[options] 是编译选项,如优化选项`-O2`、禁用调试信息`-g` 等。
output_file 是编译后的可执行文件名。
例如,编译并生成名为`hello` 的可执行文件:```bashgcc main.c -o hello```2.运行编译后的可执行文件。
运行命令如下:```bash./output_file```例如,运行刚刚编译的`hello` 程序:```bash./hello```**四、实用技巧与注意事项**1.使用`gcc` 编译器时,可以利用`-Wall` 选项显示所有警告信息,以便更好地调试代码。
2.使用`gdb` 调试器进行程序调试,熟练掌握`gdb` 的基本命令,如`run`、`backtrace`、`print` 等。
3.注意代码格式和缩进,遵循Linux 风格规范。
c++ linux编译命令
c++ linux编译命令
C++Linux编译命令是指在Linux系统下,使用C++语言进行程序开发时所需的编译命令。
下面是一些常用的C++ Linux编译命令: 1. g++命令:用于编译C++程序。
语法:g++ [options] file1.cpp file2.cpp ... -o output 选项说明:
- -o output:指定输出文件的文件名。
- -c:仅编译源文件,生成目标文件(.o文件)。
- -g:生成调试信息。
- -O:优化编译过程。
- -Wall:显示全部警告。
2. make命令:用于自动化编译。
语法:make [target]
选项说明:
- target:指定要编译的目标(默认为Makefile中的第一个目标)。
3. cmake命令:用于生成Makefile文件。
语法:cmake [options] source_directory
选项说明:
- -G:指定生成的Makefile文件类型。
- -D:设置变量的值。
4. gdb命令:用于调试程序。
语法:gdb [options] [executable-file [core-file or process-id]]
选项说明:
- -tui:启动GDB的文本模式界面。
- -q:禁止显示版权和欢迎信息。
- -x:执行指定的GDB脚本。
以上就是一些常用的C++ Linux编译命令,开发者们可以根据需要使用相应的命令,提高编译效率和程序质量。
实验2 Linux下C语言程序的编译与调试
6. 启动 Gdb 调试:gdb greet。 7. 查看源代码,使用命令“l”。 8. 在 23 行(for 循环处)设置断点,使用命令“b 23”。 9. 在 26 行(printf 函数处)设置断点,使用命令“b 26”。 10.查看断点设置情况,使用命令“info b”。 11.运行代码,使用命令“r”。 12.单步运行代码,使用命令“n” 13.查看暂停点变量值,使用命令“p string2[size - i]”。 14.继续单步运行代码数次,并使用命令查看,发现 string2[size-1]的值正确。 15.继续程序的运行,使用命令“c”。 16.程序在 printf 前停止运行,此时依次查看 string2[0]、string2[1]„,发现
实验 2 Linux 下 C 语言程序的编译与调试
一、实验内盘上输入 4 个整数,找出其中最大的整数的程序,用 gcc/g++ 编译并观察编译后的结果。
2. 用 gdb 调试该程序。 3. 运行生成可执行文件。
二、实验目的:
1. 练习 Vi 编辑器来编译 C 程序。 2. 学会使用 gcc/g++编译、gdb 调试 C 程序。
四、实验分析
为了使 GDB 正常工作,必须使程序在编译时包含调试信息。调试信息里包含程 序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。GDB 利用这 些信息使源代码和机器码相关联。所以在编译时用-g 选项打开调试选项。
GCC 命令的基本用法:gcc [options] [filename] -o 选项为即将产生的可执行文件指定一个文件名来代替默认的 a.out。 GDB 是一个用来调试 C 和 C++程序的强有力的调试器。它使用户能在程序运行 时观察程序的内部结构和内存的使用情况。
linux编译c程序
linux编译c程序
在Linux中编译C程序的步骤如下:
1. 准备源代码文件,通常以.c或.cpp文件扩展名结尾。
2. 打开终端或命令行界面,进入代码文件所在的目录。
3. 使用文本编辑器打开代码文件,检查代码是否正确。
4. 使用以下命令编译C代码文件:
```shell
gcc -o output_file input_file.c
```
解释:
- `gcc`是Linux C编译器的名称;
- `-o`选项用于指定输出文件的名称;
- `output_file`是编译后生成的可执行文件的名称;
- `input_file.c`是待编译的C源代码文件的名称。
例如:
```shell
gcc -o hello_world hello_world.c
```
5. 执行编译后生成的可执行文件。
使用以下命令:
```shell
./output_file
```
例如:
```shell
./hello_world
```
输出:
```
Hello, world!
```
注意事项:
- 执行可执行文件时,需要在当前目录下执行;
- 如果在运行时,提示权限不够,可以先使用chmod命令修改程序文件的权限为可执行:
```shell
chmod +x output_file
```
例如:
```shell
chmod +x hello_world ```。
Linux下编译C语言程序
Linux下编译C语言程序
Linux下编译C语言程序
导语:C语言的`设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
下面我们来看看Linux下编译C语言程序,希望对大家有所帮助。
Linux下编译C语言程序:简单操作编译单个文件。
编辑
首先创建一个hello.c文件
通过vim hello.c打开
输入
1 2 3 4 5 6 #include<stdio.h>
#include<stdlib.h>
int main(){
printf("hello linux ");
exit(0);
}</stdlib.h></stdio.h>
然后保存。
2. 编译
1 gcc hello.c -o hell //指定生成为hell.o的链接文件
3. 链接运行
1 ./ hell //在当前目录下进行链接运行
打印结果:hello linux
编译多个文件
【Linux下编译C语言程序】。
1.9 linux下c程序的调试和编译
调试器gdb
• 编译: gcc -o greeting greeting.c 显示如下结果: The string is hello there The string printed backward is 所设想的输出应该是: The string printed backward is ereht olleh
16
练习
1、键入vi,编辑一个新文件exam.c。其内容如下: #include <stdio.h> main() { int a,i=0; a=0; while(i<10) { a=a+2; printf("the value of a=%d \n",a); sleep(1); i=i+1; } }
17
练习
• 2、保存退出exam.c
– 编译exam.c 。 • 使用 gcc -o exam.o exam.c • 使用 gcc - g -o gexam.o exam.c • 比较gexam.o 与 exam.o的大小 • 执行exam.o 键入 ./exam.o 。这里./表示当前目录 • 执行gexam.o 键入 ./gexam.o。
7
目录
gcc编译器 调试器gdb
8
调试器gdb
Linux 包含了一个叫gdb 的GNU 调试程序。gdb 是一个用来 调试C 和C程序的强力调试器。它使你能在程序运行时观 察程序的内部结构和内存的使用情况。gdb 功能非常强 大,适用于修复程序代码中的问题。 • • • • 查看程序的内部结构 打印变量值 可设置断点以使程序在指定的代码行上停止执行 单步调试源代码
18
练习
• 3、利用gdb调试exam.c。 • 4、利用屏幕输出字符(printf())调试exam.c。
Linux下编译与调试
LINUX下编译与调试1.gcc/g++编译器对于.c格式的C文件,可以采用gcc或g++编译对于.cc、.cpp格式的C++文件,应该采用g++进行编译常用的选项:-c 表示编译源文件-o 表示输出目标文件-g 表示在目标文件中产生调试信息,用于gdb调试-D<宏定义> 编译时将宏定义传入进去-Wall 打开所有类型的警告。
1. gcc编译过程:预编译→编译→汇编→链接当我们进行编译的时候,要使用一系列的工具,我们称之为工具链.其中包括:预处理器,编译,汇编器as,连接器. 一个编译过程包括下面几个阶段:(1)预处理:预处理器将对源文件中的宏进行展开。
(2)编译:gcc将c文件编译成汇编文件。
(3)汇编:as将汇编文件编译成机器码。
(4)链接:将目标文件和外部符号进行连接,得到一个可执行二进制文件。
下面以一个很简单的test.c来探讨这个过程。
#include <stdio.h>#define NUMBER (1+2)int main(){int x = NUMBER;return 0;}(1)预处理:gcc –E test.c -o test.i 我们用cat查看test.i的内容如下:int main() int x=(1+2); return 0;我们可以看到,文件中宏定义NUMBER出现的位置被(1+2)替换掉了,其它的内容保持不变。
(2)编译:gcc -S test.i –o test.s 通过cat test.s查看test.s的内容为汇编代码。
(3)汇编:as test.s -o test.o 利用as将汇编文件编译成机器码。
得到输出文件为test.o. test.o中为目标机器上的二进制文件. 用nm查看文件中的符号:nm test.o输出如下:00000000 T main。
有的编译器上会显示:00000000 b .bss 00000000 d .data 00000000 t .text U ___main U __alloca 00000000 T _main既然已经是二进制目标文件了,能不能执行呢?试一下./test.o,提示cannotexecute binary file.原来___main前面的U表示这个符号的地址还没有定下来,T表示这个符号属于代码。
linux编译c程序
linux编译c程序Linux操作系统是一种常见的操作系统,它具有很好的扩展性和可定制性。
对于开发人员来说,在Linux上开发程序是非常常见的。
下面,我们就来谈谈如何在Linux系统中编译C程序。
在Linux系统中,编译C程序需要使用GCC编译器。
GCC是GNU Compiler Collection的缩写,是一个自由软件的编译器集合。
GCC编译器可以编译多种语言,包括C、C++、Objective-C、Fortran、Ada、和Java。
首先,我们需要在Linux系统中安装GCC编译器。
GCC编译器一般在Linux系统中已经预装了,如果没有预装,我们可以通过命令行安装它。
根据不同的Linux发行版,安装命令也可能不同,但一般类似于以下命令:```sudo apt-get install gcc```然后,我们需要编写一个C程序,例如一个简单的Hello World程序:```#include <stdio.h>int main(){printf("Hello World!\n");return 0;}```我们可以使用任何文本编辑器编写C程序,比如vi、nano、gedit等。
接下来,我们需要在命令行中使用GCC编译器编译C程序。
假设我们将C程序保存为hello.c文件,我们可以使用以下命令进行编译:```gcc hello.c -o hello```其中,gcc是GCC编译器的命令,hello.c是我们编写的C程序文件名,-o参数是输出文件的选项,后面跟的是编译后的可执行文件的文件名。
编译成功后,我们就得到了一个名为hello的可执行文件。
我们可以运行该可执行文件,命令如下:```./hello```其中,./是表示当前目录的意思,hello表示我们编译后得到的可执行文件的文件名。
运行该命令后,我们就可以看到“HelloWorld!”被输出到了屏幕中。
在编译C程序的过程中,还可以使用一些常用的选项。
Linux下如何编译并运行C程序
Linux下如何编译并运⾏C程序
GCC是Linux操作系统下⼀个⾮常重要的源代码编译⼯具,有着许多重要的选项,⽀持许多不同语⾔的编译,如C、C++、Ada、Fortran、Objective、Perl、Python、Ruby以及Java等,甚⾄Linux的许多内核和许多其他⾃由软件以及开放源码应⽤程序都是⽤C语⾔编写并经gcc编译⽽成的.
1.编译单个源⽂件
[例如]在屏幕上打印"Hello,Linux."
[源代码]
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
printf("Hello,Linux.\n");
exit(0);
}
将源⽂件保存为hello.c,开始进⾏编译
$gcc -o hello hello.c
编译成功完成后,在当前路径下,⽣成⼀个名为hello的⽂件,然后执⾏
$./hello
在屏幕上,你将会看到打印结果:Hello,Linux.
说明:在默认情况下,编译成功完成后,会在当前路径下,⽣成⼀个名为a.out的⽂件,然后执⾏$./a.out便可打印结果,但通常可以通过选项-o来指定⾃⼰的可执⾏程序名称;
2.编译多个源⽂件
3.使⽤外部函数库
4.使⽤共享函数库和静态函数库
5.gcc选项详细描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在默认情况下,gcc通过文件扩展名来区分源文件的语言类型:
扩展名为 .c ,为c语言源代码文件;
扩展名为 .C ,.cc 或.cpp,为c语言源代码文件;
扩展名为 .h ,说明文件时程序所包含的头文件;
(一)用gcc来编译程序
(二)用gdb调试程序
1. 在程序中加入调试信息
为了使用gdb进行程序调试,需要在编译程序时加入供gdb使用的调试信息。方法是在编译程序时使用 - g 参数。
gcc -g -o [a.debug] a.c (也可以自己取个名字 如 test.debug)
2. 启动gdb 在终端输入如下命令
假设 在 /root/c 目录下 有个c语言源文件test.c ,则可以通过如下方式编译:
(1) cd /root/c (进入到/root/c 目录)
gcc test.c
此时 ,gcc编译出来的程序为当前目录下的文件 a.out
(2)用参数 -o 设置输出的目标文件
gdb
3.使用gdb调试一个程序前,还需要加载这个程序,加载的命令是file。
file a.debug
4. 运行调试程序,gdb中的run命令可以使这个程序以调试的模式运行。运行的命令是run。
run
此后可以通过next,step,continue,三个命令来运行程序 ,其中next,step都是单步执行,
两者的区别在于,step可以进入的函数体,而next只是一步完成函数的调用。
5.变量的查看,print命令可以在程序的运行过程中查看一个变量的值。具体的命令为:
print [变量名] 例如:print i (查看变量i的值)
6.完成程序的调试后,输入“q” 命令,推出gdb。
********************************************************
在gdb中查看代码:
list 1
list 2
......
********************************************************
在gdb中加入断点
break [行号] 例如: break 6 (在第六行增加一个断点)
********************************************************
cd /root/c
gcc test.c - o test(或者: gcc -o test test.c)[也就是编译后的文件跟在-o 后]
此时, gcc编译出来的程序为当前目录下的文件test ,当然也可以指定在其他目录 ,如:/home/hupan/test
在gdb中查看断点
info breakpoint
如果要查看某一个断点的信息 可以
info breakpoint [断点号] ingo breakpoint 2 (查看第二个断点的信息)
********************************************************