编译动态库并应用libdl调用动态库

本文详细介绍如何在C语言环境下编译动态库(libtest.so)并应用其内部函数(test())进行编程。首先,通过gcc命令将libtest.c编译成动态库;然后,利用libdl.so提供的函数,在runlib.c中加载并调用test()函数,实现两数相加的运算。

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

        为了跨语言交互编程及实现代码保护,常把源代码内相关函数编译为动态库,从而方便使用。现对动态库编译及应用总结如下:

一、编译动态库

       1、 编写libtest.c

int test (int a,int b)
{
	return a+b;
}

       2、编译libtest.so

gcc -shared -Wl,-soname,libtest.so -o libtest.so libtest.c

          通过上述步骤即可在当前目录获得libtest.so的动态库文件,该库文件内有一test()函数,完成了两个输入参数的加法运算。

二、C语言下应用动态库编程

         libdl.so提供了对动态库打开、加载函数、关闭、错误处理四个函数,应用该四个函数能够完成对libtest.so内的test()函数的加载,并应用该函数完成相应的程序开发。

      1、编写runlib.c

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#define DLL_PATH "./libtest.so"
typedef int (*func)(int, int);
int main(){
    void *dlhandler;
    char *error;
    func func = NULL;
    dlhandler = dlopen(DLL_PATH,RTLD_LAZY);
    if(dlhandler == NULL){
        fprintf(stderr,"%s\n",dlerror());
        exit(-1);
    }
    dlerror();
    func = dlsym(dlhandler,"test");
    printf("%d\n",func(1,2));
    dlclose(dlhandler);
    return 0;
}

    2、编译runlib.c

gcc runlib.c -o runlib -l dl

    ./runlib 可以得到输出结果为3。程序能够调用当前目录下libtest.so内部的test()函数,并把该函数指针映射到了func函数,从而完成了1+2输出3的运算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值