动态链接库(dlopen、dlsym、dlclose)(Linux)

本文介绍了动态链接库的生成方法,包括在导出处使用`extern C`声明和在编译时添加`-fPIC`选项。还详细阐述了如何通过`<dlfcn.h>`头文件中的`dlopen`、`dlclose`和`dlsym`函数来动态加载和使用库。动态链接允许程序在运行时加载和链接库,提供了灵活性和资源效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

动态链接,是在程序已经执行时,加载链接的方法

二、有关动态链接库生成

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:导出库的函数名称(符号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值