1.首先先来上三段代码

//hello.h头文件

#ifndef HELLO_H//如果未定义过HELLO_H,则...。因为有可能在大型项目中,有其他的头文件对HELLO_H进行过定义。

#define HELLO_H

void hello(const char* name);

#endif//HELLO_H

//hello.c函数c文件

#include

void hello(const char * name){

printf("Hello%s!\n",name);

}

//main.c主程序c文件

#include"hello.h"//使用双引号""来引用头文件表示使用相对路径进行查找,该语句相当于"./hello.h"

void main(){

hello("everyone");

}

将这三个文件放到同一目录下。

2.使用gcc命令先将函数文件hello.c编译成.o文件。

gcc -c hello.c

3.根据.o文件创建静态库.a

使用ar命令

ar cr libmyhello.a hello.o

4.将静态库连接编译并运行

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

./hello

-o 表示指定输出文件名字,如果不适用则根据.c文件生成默认命名,mian。 -L. 表示在当前目录下查找第三方库。 -lmyhello 表示连接名为libmyhello.a或libmyhello.so的库。

5.根据.o文件创建动态库.so,并连接运行

步骤与创建静态库时类似 首先使用gcc -share -fPIC命令创建动态库.so,并且使用 -o指定生成文件名。

gcc -share -fPIC -o libmyhello.so hello.o

然后将.so库与.c文件进行连接编译

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

还有额外的一步,将创建的.so库移动到/usr/lib目录下。因为动态库与静态库不同,他没有将库内代码并入执行文件中,而是在执行时搜索/usr/lib下的.so动态库文件来运行。

mv ./libmyhello.so /usr/lib

最后执行

./hello

即可。

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: