一、介绍
动态链接,是在程序已经执行时,加载链接的方法
二、有关动态链接库生成
1、在导出处使用 extern "C"申明
extern "C"
{
void fun1()
{
...
}
void fun2()
{
...
}
}
2、在链接时使用 -fPIC。fPIC是说明该库与位置无关,可以通过全局偏移表(GOT)访问地址
1、终端/makefile
gcc main.cpp -fPIC -shared -o libapp.so
2、CMakeLists.txt (cmake)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
add_library(app SHARED main.cpp)
3、动态链接库依赖其他库
(1)链接动态库,直接链接
(2)链接静态库,该静态库需要符合 fPIC
三、接口介绍
头文件:<dlfcn.h>
链接 dl动态库
1、打开
void *dlopen(const char *filename, int flag);
返回值:
成功:返回值接口句柄
失败:NULL
参数:
filename:动态链接库路径
flag:
RTLD_LAZY:函数符号,调用dlsym时解析
RTLD_NOW:函数符号打开时解析
2、关闭
int dlclose(void *handle);
返回值:
成功:0
失败:非零
参数:
接口句柄
3、解析函数
void *dlsym(void *handle, const char *symbol);
返回值:
成功:返回函数指针,经过强转即可直接调用
失败:NULL
参数:
handle:接口句柄
symbol:导出库的函数名称(符号)