Linux下C语言开发环境

实验步骤

1.Linux下C语言开发流程

(1)启动虚拟机,进入Centos操作系统,然后启动终端。
(2)使用Vi编辑源程序,在终端中输入vi hello.c,然后参考2.1.2节输入源代码,编辑完成后存盘,如图所示。

hello.c内写入c程序代码
(3)编译源代码,在终端下输入gcc –o hello hello.c进行编译。
(4)运行程序,在终端中查看程序运行结果,如图所示。
在这里插入图片描述

2.vi、Vim编辑器的使用

(1)Vim的启动。
(2)三种模式:命令模式、编辑模式、底行模式之间的切换,以及三种模式下的常用命令的使用。命令行模式常见功能键如表3.1所示。底行模式常见功能键如表3.2所示,完成如下操作练习。
1.在“/root”目录下建一个名为“Vi”的目录。mkdir /root/Vi
2.进入“Vi”目录。cd /root/Vi
3.将文件“/etc/inittab”复制到“Vi”目录下。cp /etc/inittab ./
4.使用Vi打开“Vi”目录下的inittab。vi ./inittab
在这里插入图片描述

  1. 设定行号,指出设定initdefault(类似“id:5:initdefault”)的所在行号。:set nu
  2. 设定行号
  3. 将光标移到该行。17
  4. 复制该行内容。yy
  5. 将光标移到最后一行行首。G
  6. 粘贴复制行的内容。p
  7. 撤销第9步的动作。u
    11.将光标移动到最后一行的行尾。$
    12.粘贴复制行的内容。p
    13.光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。21G
    13.删除该行。dd
    14.存盘但不退出。:w(底行模式)
    15.将光标移到首行。1G
    16. 插入模式下输入“Hello,this is Vi world!”。按i键并输入“Hello,this is Viworld!”(插入模式)
    17. 返回命令行模式。Esc
    18. 向下查找字符串“0:wait”。/0:wait(命令行模式)
    19.再向上查找字符串“halt”。?halt
    20.强制退出Vi,不存盘。:q!(底行模式)

**3.GCC编译器的使用

4.GDB基本命令的使用**

gdb所提供的功能,使用Vim编辑源程序,在终端中输入vi test.c,输入如下源代码,编辑完成后存盘。此代码的功能为输出倒序main函数中定义的字符串,但结果没有输出显示,现通过调试的方式来解决程序中存在的问题。程序源代码如下:

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int display1 (char *string1);
int display2 (char *string1);
int main ()
{
       char string[] = "Embedded Linux";
       display1 (string);
       display2 (string);
}

int display1 (char *string1)
{
       printf ("The original string is %s \n", string);
}
int display2 (char *string1)
{
       char *string2;
       int size,i;
       size = strlen (string1);
       string2 = (char *) malloc (size + 1);
       for (i = 0; i < size; i++)
               string2[size - i] = string1[i];
       string2[size+1] = ' ';
       printf("The string afterward is %s\n",string2);
}

(1)用gcc编译:gcc -g test.c -o test
(2)运行test:./test,输出为:
在这里插入图片描述
可见,该程序没有能够倒序输出。
(3)启动gdb调试:gdb test
查看源代码:l
在23行(for循环处)设置断点:b 23
在这里插入图片描述
在26行(printf函数处)设置断点:b 26。
查看断点设置情况:info b
在这里插入图片描述
运行代码:r
在这里插入图片描述
单步运行代码:n
进入第24行
查看暂停点变量值:p string2[size - i]
n与此步多次运行
继续单步运行代码数次,并使用命令查看,发现string2[size-1]的值正确
继续程序的运行:c
程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string[0]没有被正确赋值,而后面的复制都是正确的,这时,定位程序第24行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size-1”,这样string2[0]就永远不能被赋值而保持NULL,故输不出任何结果。

(gdb) p string2[0]
$10 = 0 '\000'
(gdb) p string2[1]
$11 = 120 'x'
(gdb) p string2[2]
$12 = 117 'u'
(gdb) p string2[3]
$13 = 110 'n'
(gdb) p string2[4]
$14 = 105 'i'
(gdb) p string2[5]
$15 = 76 'L'
(gdb) p string2[6]
$16 = 32 ' '
(gdb) p string2[7]
$17 = 100 'd'
(gdb) p string2[8]
$18 = 101 'e'
(gdb) p string2[9]
$19 = 100 'd'
(gdb) p string2[10]
$20 = 100 'd'
(gdb) p string2[11]
$21 = 101 'e'
(gdb) p string2[12]
$22 = 98 'b'
(gdb) p string2[13]
$23 = 109 'm'
(gdb) p string2[14]
$24 = 69 'E'
(gdb) p string2[15]
$25 = 32 ' '
//可以看出,除了string2[0]未被赋值为空其他都已经正确赋值。

退出gdb:q
重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可。
在这里插入图片描述
使用gcc重新编译,查看运行结果:./test
在这里插入图片描述

这时,输入结果正确。

5.Make工程管理器的使用

(1)编辑源代码,利用文本编辑器vi创建hello.c文件,vi hello.c

#include <stdio.h>
int main()
{
printf("Welcome Emdoor!\n");
return 1;
}

(2)编写Makefile文件。
利用文本编辑器创建一个makefile文件,并将其保存到与hello.c相同的目录下
在这里插入图片描述

CC=gcc
CFLAGS=
all:hello
hello:hello.o
$(CC) $(CFLAGS)hello.o -o hello
hello.o:hello.c
$(CC) $(CFLAGS)-c hello.c -o hello.o
clean:
rm -rf hello*.o

(3)使用make编译项目。执行make,查看并记录所生成的文件和运行的结果。
在这里插入图片描述

6 使用SRPM包安装vsftpd。

1)下载vsftpd的SRPM包,到centos的/root目录下。(也可以直接从官网下载http://vault.centos.org/6.3/updates/Source/SPackages/vsftpd-2.2.2-11.el6_3.1.src.rpm)成功后看到如下图红色所示的文件。在这里插入图片描述

2)对下载的vsftpd-2.2.2-11.el6_3.1.src.rpm进行重新的编译,命令如下:

//如果没有RPM打包rpmbuild命令,这个命令来自rpm-build软件包,这个是必装的。

yum install rpm-build -y   
//安装rpm-build软件,以提供rpmbuild命令
rpmbuild --rebuild vsftpd-2.2.2-11.el6_3.1.src.rpm

这里有四个依赖包,请用yum -y install 进行安装。
在这里插入图片描述
解决错误后继续执行该命令,就会得到rpm包(注意观察rpm所在的位置)。

rpmbuild --rebuild vsftpd-2.2.2-11.el6_3.1.src.rpm

在这里插入图片描述
3)安装vsftpd,可以使用包vsftpd-2.2.2-11.el6.1.i686.rpm,也可以使用包vsftpd-2.2.2-11.el6_3.1.src.rpm来进行安装。
命令提示:

rpm –ivh

7 打包自己软件的操作。

1)制作源代码包
将main-0.1.tgz包下载到/root目录下,解压该文件,观察该程序的makefile文件。

[root@zhangH~/main-0.1]$ ls
cos_value.c  haha.c  main.c  Makefile  sin_value.c

这里我是直接解压在了root目录下。
在这里插入图片描述

解压到当前文件夹
tar zxvf  文件名.tgz -C ./   

解压到指定文件夹下
输入:tar  zxvf  文件名.tgz  -C /指定路径

2)把文件放到合适的位置,并建立main.spec配置文件。
把main-0.1.tgz放到/root/rpmbuild/SOURCES目录下(该目录是上一操作rpmbuild vsftpd的SRPM文件时自动生成的。
在/root/rpmbuild/SPECS目录下用vi编辑一个叫做main.spec的文件,文件内容如下图所示:

vi main.spec

写下如下代码:

Name :          main
Version:        0.1
Release:        1%{?dist}
Summary :       shows sin and cos value

Group:          Scientific Support
License :       GPLv2
URL:            http://Linux.sias.org
Source0:        main-0.1.tgz
%description
This package will Let you input your name and calculate sin cos value.
%prep
%setup -q
%build
make clean main
%install
mkdir -p %{buildroot }/usr/Local/bin
install -m 755 main %{buildroot}/usr/Local/bin
%files
/usr/local/bin/main
%changelog
* Tue Dec 3 2019 Kelsey Sias <406317789@qq.com> 0.2
- build the program

3)编译成为RPM与SRPM(在/root/rpmbuild/SPECS目录下运行如下命令:)

rpmbuild –ba  main.spec

执行这条命令需要安装rpmbuild安装包
1、安装rpm-build软件包

yum install rpm-build -y

如图:
在这里插入图片描述
执行成功后,会在rpmbuild目录下的RPMS和SRPMS目录下发现编译成的rpm包文件。

1.ls

在这里插入图片描述
4)安装,测试,查询
安装

cd /root/rpmbuild/RPMS/i686
rpm –ivh main-0.1-1.el6.i686.rpm

查询

rpm –ql main
rpm –qi main

测试
main
执行main的命令,即运行可执行文件,测试程序的功能。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值