之前, 我们在linux下制作过动态库, 并卖过。 当时我们采用的是隐式链接, 也就是说, 在代码中, 我们不用去管如何打开动态库、如何链接(这些活都交给了链接器), 只需要管如何调用就行。 隐式链接的动态库被进程加载到内存后, 就一直站着这个坑, 直到进程终结。 费时费力, 浪费地盘, 而且不灵活。
于是, 一种动态加载(程序中指定加载)的方式就出现了, 这就是我们今天要说的显式运行时加载, 这个加载、卸载过程受程序员本身控制(而非链接器), 所以有了更大的自由度。 对于一些需要长时间运行的程序(如后台服务), 利用显式运行时链接链接就很有好处了, 非常便于升级so库。
废话少说, 直接撸起:
taoge_add.c的代码为:
int add(int x, int y)
{
return x + y;
}
main.c的代码为:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
typedef int (*pFUN)(int, int); // 函数指针类型
int main()
{
void *pHandle = NULL;
char *pError = NULL;
pFUN pfun = NULL;
pHandle = dlopen("./li