简述L INUX下C语言的开发工具,Linux系统下的c语言编程

Linux操作系统支持多种高级语言,其中就包括c语言,linux系统的内核的绝大多数代码就是用c编写的,另外Linux平台上的许多应用程序也是用c完成的。Liinux系统拥有许多用于用于程序的生成以及分析的软件工具。其中c语言主要使用gcc和make工具等,学会使用这些工具对初学者十分重要。

可以使用Linux中的多种文本编辑器(如vi、pico、gedit、emacs等)来编写程序,下面用vi文本来编写一个c语言程序输出“hello linux”

首先打开vi文本编辑器文件名为hello.c,输入程序代码,这和我们平时编写的C语言程序一样,接着保存退出,然后就是使用gcc编译、链接后生成可执行文件hello,最后运行hello文件。

f07e7a8b8f3b2c5999e46586eabb5c4a.png

Linux下最常用的C编辑器是GNU gcc。gcc命令可以启动c编译系统,当执行gcc时,它将完成预处理、编译、汇编和连接4个步骤并生成最后的可执行代码。产生的可执行程序默认保存为a.out文件。gcc命令可以接受发多种文件类型并依据用户指定的命令行参数对它们做出相应的处理。这些文件类型包括静态链接库(扩展名为.a),c语言源程序(.c),c++源文件(.C,.cc或者.cpp),汇编语言源文件(.s),预处理输出文件(.i)和目标代码(.o)。如果gcc无法根据一个文件的扩展名来判断一个文件的类型,它将假设这个文件是一个目标文件或库文件。

gcc支持编译的后缀名:

.后缀名

对应的语言

.c

C原始程序

.C

C++原始程序

.cc

C++原始程序

.cxx

C++原始程序

.m

Objective-C原始程序

.i

已经过预处理的C原始程序

.ii

已经过预处理的C++原始程序

.s

汇编语言原始程序

.S

汇编语言原始程序

.h

预处理文件(头文件)

.o

目标文件

.a/.so

编译后的库文件

gcc 命令语法: gcc 【options】 filename-list

常用选项:

-ansi                                               以ANSI标准

-c                                                     跳过连接步骤,编译成目标(.o)文件

-g                                                     创建用于gdb的符号表和调试信息

-S                                                    跳过汇编和连接阶段,并保留编译产生的汇编代码(.a文件)

-v                                                     产生尽可能多的输出信息

-w                                                   忽略警告信息

-o                                                    将生成的可执行程序保存到指定文件中,而不是默认的a.out

函数库:函数库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的,它们通常由一些相互关联的函数组成并执行某项常见的任务。

标准系统库文件一般存放在Linux文件系统/lib和/usr/lib目录中。库文件的名字以lib开头,最后部分以.开始,后面跟类型:.a代表传统的静态函数库    .so代表共享函数库

例如,libm.a为静态数学函数库

函数库通常以静态库和共享库两种格式存在,可用ls    /usr/lib命令查看

下面创建一个小型函数库,它包含两个函数pro1和pro2,然后在一个示例程序中调用pro2,然后运行,调试

1.编写两个函数pro1和pro2的源文件

fbaa5d5d4869951be023df89a1ea4c8c.png

2.用gcc编译这两个函数,产生包含在库文件中的目标函数。使用gcc 的 -c 选项是为了阻止编译器创建一个完整的程序,gcc将把源程序编译成目标函数,文件尾以.o结尾。如果此时试图创建一个完整的程序将不会成功,以为还未定义main函数

55984c43acd45800facbb84dfd8844fb.png

3.为库文件创建一个头文件lib.h

391203882b7f6278da6fdcb7eec09c54.png

4.编写主程序,调用pro2

11ceeb011399a77cb65e96a762e49c9d.png

5.编译并测试这个程序。暂时为编译器显式指定目标文件,然后要求编译器编译的文件并将其与预先编译好的目标模块pro2.o链接

6ba9cba5a1daa7d4aaf37960c555bbc8.png

6.现在,创建并使用一个空文件。用ar程序创建一个归档文件并将目标文件添加进去,当然ar也可以用来创建任何类型的归档文件

32fb35c3089090f263677f941748d0cb.png

当然也可以用-l选项来访问函数库,但是因为其未保存在标准位置,所以必须用-L选项来指示gcc在何处可以找到它,如下所示:;

3324b2bd8219e543bba3ad4f85ebceef.png

可以使用nm命令来查看目标文件、函数库或可执行文件里包含的函数

fa96dfd774c330d8f29d4cc165d7bcdd.png

静态库的一个缺点,当同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,就会在内存中有同一函数的多份拷贝,在程序文件自身也有多份同样的拷贝。这将消耗大量宝贵的内存和磁盘空间。共享库克服了这种不足,可以用共享库来实现函数的动态链接。

在c语言开发的程序中,许多头文件和源文件都互相依赖。如果修改了其中的一个文件,就必须重新编译所有依赖它的文件。Linux有个很强大的工具make,它可以管理多个模块。make工具依赖一个特殊的,名字为makefile或Makefile的文件,这个文件描述了系统中的各个模块之间的依赖关系。系统中的部分文件改变时,make根据这些关系决定一个需要重新编译的文件的最小集合。如果软件包括几十个源文件和多个可执行文件,这时make工具特别有用。

make工具的命令语法:

make [选项]    [目标]  [宏定义]

常用选项:

-d                               显示调试信息

-f 文件                       此选项告诉make使用指定文件作为依赖关系文件

-n                              不执行makefile中的命令,只是显示输出这些命令

-s                              执行但不显示任何信息

GNU make的主要功能是读进一个文本文件makefile并根据makefile的内容执行一系列的工作。

一个Makefile文件主要包括含有一系列的make规则,每条make规则包含以下内容:

目标文件列表:依赖文件列表

命令列表

Linux系统中有许多调试器,包括gdb、kgdb、xxgdb、mxgdb等。GNU调试程序gdb可以用于调试C、C++、Module-2、PASCAL等多种语言携程的程序。

下面利用一个函数来掩饰gdb的调试用法,这个函数要求输入两个整数,判断输出里面较大的那个值

1.设计编译源程序代码

6b4236d72c79e7d22acc5920e6fa776d.png

2.使用gcc编译程序,使用含有-g选项的gcc命令,这样编译出的可执行代码中才包含调试信息,否则之后的gdb无法载入该可执行文件。

3.进入gdb调试环境:gdb后面跟的是可执行文件

003f16a3c7a650257384cbf3c69e418b.png

4.使用gdb调试程序

(1)查看源程序,在gdb中输入“l“就可以查看源程序,一次显示十行。

5c9d7710731f4dad3843611b439cca1f.png

(2)使用”b"命令设置断点

(3) 使用命令“info b”查看断点信息

c4071eb2d1335b653f6c92fd6c202995.png

(4)输入“r”可以运行程序

(5)输入“n”或“s”可以单步运行,它们的区别是,若有函数,调用时,“s”会进入该函数,“n'不会进入该函数

(6)输入”p 变量名“可以产看指定变量的值

d2614f7027a8e4975383a39239764b39.png

(7)在查看完变量或堆栈的情况后可以输入命令”c“恢复程序的正常运行,把剩余的程序执行完,并显示执行结果

(8)可以通过输入命令“q”,回车后退出gdb环境

bd6656005ed059837f852d447a16b729.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 实验目的 1、通过实验了解和熟悉Linux系统管理; 2、掌握用户和组管理命令; 3、掌握软件包安装命令和步骤; 4、掌握网络通信管理命令; 5、掌握进程管理命令; 6、掌握系统的服务管理命令; 7、掌握磁盘操作管理命令。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux系统管理 2、用户和组管理命令 (1)帐户管理命令: useradd、 usermod、 passwd、userdel (2)组帐户管理命令: groupadd、 groupdel. gpasswd 3、软件包安装命令和步骤 (1) RPM 包的安装 安装RPM包的基本命令格式是: rpm -ivh (2) RPM 包的删除 删除RPM包的基本命令格式是: rpm -e (3) RPM 包的查询 rpm - qa (4) RPM 包的升级 升级RPM包的基本命令格式是: rpm -Uvh (5) RPM包的验证 验证RPM包的基本命令格式是: rpm -V [参数] (6)建立TAR包 有两种方式: -种是建立普通的TAR包,只打包,不压缩 tar cvf 另一种是打包并压缩,选项是“zcvf”,其中“z”代表使用“gzip” 程序 进行文件的压缩 tar zcvf (7)查询TAR包 在释放TAR包之前,查看TAR包中的文件内容。其格式如下: tar ztf (8)释放TAR包 它也分为解非压缩和压缩包两种方式,命令格式如下: tar zxvf 4、网络通信管理命令 (1)hostname命令:显示及设置主机名。 (2)ifconfig命令:显示当前活动的(或指定的)网卡设置。 其格式为: ifconfig [网卡设备名] 重新设置网卡的IP地址,-般由root用户进行设置。其格式为: Ifconfig 网卡设备名 IP 地址 (3) ping命令:网络测试命令 ping [-c报文数] 目的主机地址 (4)write命令:实时给其他用户发送消息 write username [tty] (5)wall命令:以广播方式向系统中的所有用户发送消息 wall message (6)mail 命令:双方用户不同时在线时,使用mai发送和接收消息 mail username mail -s topic username<filename 查看邮件使用mail命令,输入邮件编号以查看邮件 5、进程管理命令 (1)at命令:定时任务命令 (2)ps命令:进程查看命令 ps -ef ps -axu (3)free命令:显示系统内存的使用情况,包括内存总量、已经使用内存数量,空闲内存数量等信息。 (4) top命令:实时监控系统进程。 (5)sleep 命令:用于使进程延迟一段时间再执行。 其格式为: sleep time; command (6)kill命令:来杀死程序产生的进程来结束程序的运行。 格式1 : kill PID 格式2 : kill -9 PID “-9”为SIGKILL信号,属于强制结束 (7)前台与后台运行相关命令 command、command & 6、系统的服务管理命令 (1) runlevel 命令:显示系统当前和上一次的运行级别 (2) init 命令:转换服务的运行级别 init n (3)systemctl 命令:系统服务管理 查看系统服务启动状态。其格式: systemctl list-unit-files --type service 列出所有处于激活状态的服务。其格式为: systemctl list-units --type service --all 服务状态控制。其格式: systemctl [status/start/stop/ restart/reload] name.service 服务开机自启控制。其格式: systemctl [enable/di sable] name.service 7、磁盘操作管理命令 (1)查看系统磁盘分区情况命令: Fdisk -l (2)使用命令手工挂载 mount命令:查看所有挂载设备 mount [-t fs-type] [-o option] device mountpoint 例: mount /dev/cdrom /mnt/cdrom (注意,先要建立挂载目录,并保证设备存在) (3)卸载 umount [device] [dir]
一、 实验目的 1、通过实验了解和熟悉Linux网络服务; 2、掌握Linux下建立Web服务器; 3、掌握Linux下建立FTP服务器。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux网络服务 了解NFS网络文件系统,NFS网络文件系统架设及挂载方法,Web服务器的架设方法,FTP服务器的架设方法及访问方法,Samba服务器的架设方法。 2、Linux下建立Web服务器 (1)Apache 服务器的安装及启动 ●检测与安装 Apache rpm -qa | grep httpd ●如果没有检测到软件包,需要进行安装,在安装目录中,执行如下命令: rpm -ivh httpd-tools*. Rpm rpm -ivh mailcap-2.1.31-2.el6.noarch.rpm rpm - ivh httpd-2*. rpm rpm -ivh httpd-manual-2.*.rpm ●重新启动/停止/启动Apache服务: systemctl restart/stop/start httpd.service 或service httpd restart/stop/start ●查看 Apache服务器的运行状态: systemctl status httpd. service 或service httpd status ●测试 Apache服务器运行状态: 在图形界面打开火狐浏览器输入http://127. 0.0.1呈现测试页(CentOS 用户可以在终端使用lynx 浏览器打开,如没有安装,则使用rpm在光盘中安装lynx 浏览器) 在/var/www/html目录下创建test. html页面,使用vi编辑保存内容,重启apache服务 在火狐浏览器输入http://127. 0. 0.1/test. html查看test. html内容 (2)Apache 服务器的配置 Apache主要配置文件为httpd.conf,存储位置在/etc/httpd/conf目录下 (3)个人Web站点配置 RedHat方式: a:修改配置文件,使用vi编辑器修改主配置文件 /etc/httpd/conf/httpd. conf,修改如下配置,去掉原文中的注释符号 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点.UserDir public. _html//设 置对每个用户的Web站点目录 Allow0verride FileInfo AuthConfig Limit Opt ions MultiViews Indexes SymLinkIfOwnerMatch Inc ludeNoExec Order allow, deny Allow from all Order deny, allow Deny from all 保存文件退出,重启httpd服务 b:用户创建个人Web站点 从root用户身份切换成user1用户(如果没有普通用户,需要先创建普通用户): 在user1主目录下面创建个人站点目录$mkdir public_ html 到/home目录下修改user1目录权限 $chmod 711 user1 进入到public. _html 目录下使用vi创建index. html文件,保存退出重启httpd服务 在浏览器中输入网址http://127.0.0.1/ user1/index. html,查看效果======= CentOS方式: a:修改配置文件,使用vi编辑器修改/etc/httpd/ conf.d/userdir.conf修改成如下配置信息 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点 UserDir public_ html//设置对每个用户的Web站点目录 Allowverride None #修改为 None options None#修改为None Require method GET POST OPTIONS b:用户创建个人Web站点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值