关于Liunx中gcc和库函数的基本操作
前言: 由于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。命令如下: