C语言制作编译动态链接库

最近做项目的时候,需要跟人工智能组对接应用接口,要把写好的C函数给Python代码调用,所以打算把写好的代码制作成动态库,给他们直接import,随手记录一点相关知识

1.概念

程序的函数库一般就是:静态函数库、共享函数库以及动态加载函数库

函数库一般来说编译集成了一系列我们要使用的接口(函数),程序源代码编译完成之后有一个链接环节,会通过链接器与使用到的函数库进行链接。

静态函数库的话,事实上就是在程序在链接时整个库会一起编译进目标文件中,而动态函数库则不会,只是编译进去一个链接(符号),这种有点类似硬链接和软链接的区别。这种区别导致编译出来的目标文件的大小有明显差别。

静态函数库在linux下的后缀一般为 .a,动态函数库的后缀一般为.so。

linux下动态函数库(共享库)的命名规则:
C语言制作编译动态链接库_第1张图片

2.例程

我们编写一下例程做一下简单记录

我们需要编写一下mytest.c,mytest.h,Makefile(习惯了嵌入式开发,所以还是习惯性编写一下Makefile,简化一下编译流程)

//mytest.h

#ifndef MY_TEST_H
#define MY_TEST_H

void Mytest();
#endif
//mytest.c

#include 
#include "mytest.h"

void Mytest()
{
    printf("This is a sample.\n");
}
# Makefile
 

libtestc.so:libtest.o
	gcc -shared libtestc.o -lc -o libtestc.so
libtest.o:mytest.c
	gcc -fPIC -c mytest.c -o libtestc.o
all:libtestc.so
clean:
	rm -f *.o *.so

C语言制作编译动态链接库_第2张图片

你可能感兴趣的:(Linux,C语言)