【Linux】C语言动态库和静态库的制作和使用

97 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

静态库

mylib.c

#include <stdio.h>

void mylib_api(void);

void mylib_api(void)
{
	printf("mylib printf\r\n");
}

main.c

#include <stdio.h>

void mylib_api(void);

int main()
{
	mylib_api();
	return 0;
}

编译静态库

gcc -c mylib.c 
ar cr libmylib.a mylib.o

这里说明一下静态库分为静态库文件名和静态库名 libmylib.c是库文件名 mylib是库名

编译使用静态库的main.c

gcc main.c -lmylib -L ./

-l后面跟的是库名 -L后面跟的是静态库文件的路径这里的静态库文件就在本目录所以直接./

在这里插入图片描述

动态库

我们还是采用刚才的两个.c文件,编译动态库

gcc -c -fpic mylib.c
gcc -shared -o libmylib.so mylib.o

编译程序:使用静态库和动态库都是一样的编译方法

gcc main.c -lmylib -L ./ 

到这里我们可运行程序是生成了但是还是无法运行 在这里插入图片描述 因为他是属于动态加载的所以他在运行的时候需要找到这个库文件的位置,这里一共有三种方法

  • 1、将.so动态库文件放置在/lib或者/usr/lib文件夹,系统在运行是默认会去这两个文件夹寻找动态库文件 在这里插入图片描述

  • 2、export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:这里跟我们动态库的路径;这种方法在commod窗口重启后失效 在这里插入图片描述

  • 3、将动态库的存放位置添加到环境变量中在/etc/ld.so.conf文件末添加动态库存放位置,添加完成使用ldconfig刷新生效 在这里插入图片描述 在这里插入图片描述