前言:本实验制作一个动态链接库并使用,需要知道的是在linux系统下动态链接库的后缀名是.so ,window系统中的动态链接库后缀名为.dll

1、本次实现的代码结构如下:

demo.c :实现库函数将两个整数相加

demo.h:函数原型放在.h文件里提供给第三方调用

main.c 模拟第三方用户,调用静态库

linux跨平台开发库(linux系统下制作动态连接库并使用)(1)

2、将demo.c制作成动态库.so

demo.c以及demo.h内容如下:

// demo.c #include <stdio.h> /* 自己实现的两个整数相加的函数,以静态库的形式提供, 调用者无需关注具体怎么实现,只知道调用的函数名, 以及参数 */ int my_add(int x,int y) { printf("in demo.c >_<.\r\n"); return x y; }

// demo.h #ifndef __DEMO_H__ #define __DEMO_H__ int my_add(int x,int y); #endif

在ubuntu环境下使用如下命令生成动态库libdemo.so

linux跨平台开发库(linux系统下制作动态连接库并使用)(2)

-fpic是位置无关码,-shared是按照共享库的方式来链接

3、使用动态库库

在main.c里调用动态库的my_add函数,代码如下:

#include <stdio.h> #include "demo.h" int main(void) { int sum = 0; sum = my_add(1,2); printf("sum = %d\r\n",sum); return 0; }

编译以及连接动态库的命令如下:

linux跨平台开发库(linux系统下制作动态连接库并使用)(3)

使用-ldemo就是告诉编译器在libdemo.so里找使用的函数。-L. 是指定连接器在那个目录下寻找库文件,句点.表示当前目录。但是出现运行出错。

由于可执行文件在运行的时候需要查找使用的动态库一般是在/usr/lib目录下,我们只需拷贝libdemo.so到/usr/lib即可。

另外可以通过设置环境变量LD_LIBRARY_PATH,将libdemo.so所在目录添加到环境变量即可

linux跨平台开发库(linux系统下制作动态连接库并使用)(4)

获取相关代码方式

linux跨平台开发库(linux系统下制作动态连接库并使用)(5)

,