目录
1、代码准备
sub1.c
#include <stdio.h>
float x2x(int a, int b)
{
float result = a ^ b;
return result;
}
sub2.c
#include <stdio.h>
int x2y(int start, int end)
{
int result = 0;
for (int i = start; i <= end; i++)
{
result += i;
}
return result;
}
subs.h
#ifndef subs_H
#define subs_H
float x2x(int a, int b);
int x2y(int start, int end);
#endif
main1.c
#include <stdio.h>
#include "subs.h"
int main()
{
float result1 = x2x(1, 2);
int result2 = x2y(1, 10);
printf("result1 = %.2f\n", result1);
printf("result2 = %d\n", result2);
return 0;
}
2、生成静态库
①.生成目标文件
打开终端,进入程序所在目录,输入:
gcc -c sub1.c sub2.c
执行成功之后会在目录下生成对应的.o文件,如图所示:
②.生成静态库.a 文件
接着输入:
ar crv mylib.a sub1.o sub2.o
执行成功之后,终端会输出:
并在目录下生成一个.a静态库文件,如图所示:
③.使用.a文件,创建可执行文件(需保证.a文件和.c文件处于同一目录下)
gcc -o test main1.c mylib.a // 创建一个名称为test的可执行文件
④.执行可执行文件
./test
⑤.执行结果
3、生成动态库
①.生成目标文件
gcc -c -fpic sub1.c sub2.c // 记得要加上-fpic,否则会出错
②.生成动态库.so文件
gcc -shared *.o -o myshare.so
生成结果:
③.创建可执行文件
gcc -o test main1.c myshare.so
④.执行可执行文件
./test
4、错误以及解决方法
当运行动态库的可执行文件时,可能会出现如下错误:
由于Linux系统自身系统设定的原因,只能在/usr/lib 和 /lib 下搜索对应的.so文件,因此需要将创建的.so文件移动至对应的目录下
sudo cp myshare.so /usr/lib
之后再次执行,即可运行成功了