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<stdio.h>
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
即可。