C/C++使用dlopen手动加载动态so库

本文介绍了Java的System.load()和System.loadLibrary(),以及C和C++中利用dlfcn库的dlopen和dlsym函数动态加载库和调用函数的方法。通过示例展示了如何在C和C++中加载x264编码库的函数,并进行使用。

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

前言

Java中System.load()和System.loadLibrary(),在native层就是通过dlopen打开,然后dlsym去获取函数或者变量的符号。

手动加载

C中动态加载

举个例子,在c中打开x264的一个函数:

#include <x264.h>
#include <dlfcn.h>

typedef int (*x264_encoder_encode_func)(x264_t *, x264_nal_t **pp_nal, int *pi_nal,
                                        x264_picture_t *pic_in, x264_picture_t *pic_out);

x264_encoder_encode_func x264EncoderEncodeFunc;

void dl_get_x264_addr()
{
    void *handle = dlopen("libx264.so", RTLD_LAZY);
    x264EncoderEncodeFunc = dlsym(handle, "x264_encoder_encode");
}


//下边可以直接使用x264EncoderEncodeFunc()

c++中动态加载

c++里稍微有点不一样

#include <x264.h>
#include <dlfcn.h>

int (*x264_encoder_encode_func)(x264_t *, x264_nal_t **pp_nal, int *pi_nal,
                                        x264_picture_t *pic_in, x264_picture_t *pic_out);

void dl_get_x264_addr()
{
    void *handle = dlopen("libx264.so", RTLD_LAZY);
    x264_encoder_encode_func = reinterpret_cast<int (*)(x264_t *, x264_nal_t **pp_nal, int *pi_nal,
                                        x264_picture_t *pic_in, x264_picture_t *pic_out)>(dlsym(handle, "x264_encoder_encode"));
}

//下边可以直接使用x264_encoder_encode_func()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值