关于Liunx中gcc和库函数的基本操作

这篇博客详细介绍了如何在Linux中使用gcc创建和使用静态库与动态库,包括创建.o文件、静态库(.a)和动态库(.so),以及在程序中引入静态库和动态库的方法。此外,还讲解了gcc编译过程的各个环节,如预处理、编译、汇编和链接,以及ELF文件的段和反汇编。同时,文章涵盖了nasm编译器的使用,Linux终端程序中curses库的应用,以及在Linux环境下实现贪吃蛇游戏的C语言编译方法。
摘要由CSDN通过智能技术生成


前言: 由于linux分为server版和desktop版,此次内容需要第一和第二两个模块使用的是server版,第三第四模块使用的是desktop。

一、用gcc生成静态库和动态库

1.编辑生成程序 hello.h、hello.c 和 main.c

⑴创建并进入测试文件夹

在这里插入图片描述
⑵使用vim编辑器创建所需要的三个文件

程序1:hello.h

#ifndef HELLO_H 
#define HELLO_H 
void hello(const char *name); 
#endif //HELLO_H

在这里插入图片描述

⑶程序2:hello.c

#include <stdio.h>
 void hello(const char *name
 {
   
      printf("Hello %s!\n", name); 
 }

在这里插入图片描述

⑷程序3:main.c

#include "hello.h"
int main() 
{
   
       hello("everyone"); 
       return 0;
}

在这里插入图片描述

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

⑴在命令输入行里面输出代码

gcc -c hello.c

⑵输出ls命令查看是否创建成功

在这里插入图片描述

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

静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将 创建的静态库名为 myhello,则静态库文件名就是 libmyhello.a。在创建和使用静态库时, 需要注意这点。创建静态库用 ar 命令。在系统提示符下键入以下命令将创建静态库文件 libmyhello.a,命令如下:

ar -crv libmyhello.a hello.o

最后再次使用ls命令查看是否创建成功

在这里插入图片描述

4.在程序中使用静态库的方法

静态库制作完了,如何使用它内部的函数呢?只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用 gcc 命令生成目标文件时指明静态库名,gcc 将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀 lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。在程序 3:main.c 中,我们包含了静态库的头文件hello.h,然后在主程序main中直接调用 公用函数 hello。下面先生成目标程序 hello,然后运行 hello 程序看看结果如何。

方法一

输入以下代码

gcc -o hello main.c -L. –lmyhello 

在这里插入图片描述

自定义的库时,main.c 还可放在-L.和 –lmyhello 之间,但是不能放在它俩之后,否则会提 示 myhello 没定义,但是是系统的库时,如 g++ -o main(-L/usr/lib) -lpthread main.cpp 就不出错。
然后我们输入./hello来看一下运行的结果

在这里插入图片描述

方法二

gcc main.c libmyhello.a -o hello

在这里插入图片描述

方法三

先生成 main.o:

 gcc -c main.c 

再生成可执行文件:

gcc -o hello main.o libmyhello.a 

在这里插入图片描述

动态库连接时也可以这样做。
运行可执行程序hello,命令如下:

./hello

查看结果

在这里插入图片描述
我们删除静态库文件试试公用函数hello是否真的连接到目标文件hello中了
在这里插入图片描述
从结果中我们可以看到hello文件已经连接成功

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

动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀 lib,但其 文件扩展名为.so。例如:我们将创建的动态库名为 myhello,则动态库文件名就是 libmyh ello.so。用 gcc 来创建动态库。 在系统提示符下键入以下命令得到动态库文件libmyhello.so。命令如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值