gcc在编译器的各类用途

gcc在编译器的各类用途




一、用gcc生成.a静态库和.so动态库

1、创建目录work,编辑程序one.c,two.c,all.h以及main.c

创建文件夹:mkdir;然后用nano编辑one.c,two.c,all.h,main.c文件
在这里插入图片描述

2、将.c文件编译成.o文件

1、将one.c文件编译为one.o文件
gcc -c one.c
在这里插入图片描述

2、将two.c文件编译为two.o文件
gcc -c two.c
在这里插入图片描述
3、将main.c文件编译为main.o文件
gcc -c main.c
在这里插入图片描述
执行ls命令,产生了.o文件,表明编译完成

3、由.o文件创建静态库

ar -crv libzxw.a one.o two.o
在这里插入图片描述
ls命令结果中有libzxw.a

4、用gcc将main函数的目标文件与静态库相链接

在程序中使用静态库
gcc -o all main.c -L. -lqwe
在这里插入图片描述
执行./all,显示程序运算结果

5、由.o文件创建动态库文件

gcc -shared -fPIC -o liball.so main.o
在这里插入图片描述

6、在程序中使用动态库文件

获取root权限,将文件复制到/usr/lib目录中
root权限获取方法可参照下面方式:
链接: Ubuntu下如何将普通用户提升到root权限.
在这里插入图片描述
重新创建静态库文件与动态库文件
在这里插入图片描述
结果运行
在这里插入图片描述

由静态库链接的文件大小为7.6kb
由动态库链接的文件大小为1.6kb
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大;动态库的代码是在可执行程序运行时才载入内存的,在编译过程中仅仅是简单的引用,因此代码体积较小。

二、gcc编译工具的各类用途

1、安装nasm并编译"hello world"

在Ubuntu下安装nasm
sudo apt install nasm,输入前面所设置root权限的密码,敲下回车键进行安装
在这里插入图片描述
创建目录test0;然后使用nano文本编辑器生成一个hello.c程序
程序代码示例:
在这里插入图片描述
创建目录,编辑.c文件:
在这里插入图片描述
用gcc对.c进行简单编译:
一步到位编译指令:gcc test0.c -o test0
预处理:gcc -E test0.c -o test0.i
编译为汇编代码:gcc -S test0.i -o test0.s
汇编:gcc -c test0.s -o test0.o
连接:gcc -c test0.o -o testo
在这里插入图片描述
在命令窗口中,执行./test0, 显示hello world
用binutils的size命令查看可执行文件大小:
在这里插入图片描述

2、编译hello.asm

用nasm编译hello.asm文件(ubuntu为64位)
nasm -felf64 hello.asm
在这里插入图片描述
执行./hello显示结果:hello world

三 、程序背后的优秀代码库

1、Linux 系统中终端程序最常用的光标库(curses)的几个主要函数名称与功能

move(y,x);将光标移动至(x,y)处;
refresh();我们写入的内容首先会在系统缓冲区中,经过refresh()函数刷新之后才能够显示到屏幕上;
echo()和noecho();输入的字符显示和不显示在终端上;
getch();输入一个字符;
getstr();输入一串字符串;
scanw("%s",s);;按指定格式输入内容,类似于scanf();
mvaddstr();移动到某个位置输入…
如果想清楚更多的相关函数,可参考下面链接
1、: Linux下curses库的基本操作.
2、: Linux - curses函数库.

2、以游客身份体验BBS

在 Windows系统中,“控制面板”–>“程序”—>“启用或关闭Windows功能”,启用 “telnet client” 和"适用于Linux的Windows子系统"。 然后打开一个cmd命令行窗口,命令行输入 telnet bbs.newsmth.net
在这里插入图片描述
输入命令,出现如下界面:
在这里插入图片描述
随意输入代号,出现错误,无法连接
在这里插入图片描述
至此结束,如果想了解更多详情,可以百度查阅相关资料。

3、在Ubuntu中用 sudo apt-get install libncurses5-dev 安装curses库

输入指令:sudo apt-get install libncurses5-dev,敲击回车键
在这里插入图片描述
查找curses的头文件.h与库文件.so,.a
在这里插入图片描述
输入查找指令:
头文件:whereis curses.h
库文件:whereis curses.*

4、用gcc编译终端游戏——贪吃蛇

链接: 贪吃蛇.
在gcc编译游戏前,我们需要在q.c文件中加入贪吃蛇游戏源代码;为图方便,我们可以选择复制粘贴。
下面,我们解决主机复制文本不能粘贴在虚拟机上的问题
在Ubuntu的命令行终端中执行以下命令:
sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
安装完成后,选择重启此虚拟机,即可进行复制粘贴啦

1、创建文件,用nano编辑器编辑q.c

在这里插入图片描述

2、编译并运行q.c

用此指令编译gcc q.c -lcurses -o q./q运行q.c
在这里插入图片描述

3、运行结果界面

在这里插入图片描述


四、总结与参考资料

1、总结

通过对编译器后面故事的了解,懂得如何使用gcc生成库文件(.a,.so),
用.o文件连接静(动)态库,以及它们在程序中的使用方法等;用gcc编译终端游戏,体会curses库是怎么被链接和使用的。在此过程中,也遇到了不少问题,基本都自己解决了。希望此作品对你有所帮助。

2、参考资料

1、 用gcc生成静态库和动态库.
2、 Linux GCC常用命令.
3、 静态库.a与.so库文件的生成与使用.
4、 GCC编译器背后的故事.

猜你喜欢

转载自blog.csdn.net/QWERTYzxw/article/details/109107357
今日推荐