C 程序调用 .so动态模块库例子

这个math.c

#include<stdio.h>
int add(int num1, int num2)
{
    return num1 + num2;
}
 
int sub(int num1, int num2)
{
    return num1 - num2;
}
 
int mul(int num1, int num2)
{
    return num1 * num2;
}
 
int div(int num1, int num2)
{
    return num1 / num2;
}



执行:

gcc -shared -fpic -lm -ldl -o lib_math.so math.c


生成了: lib_math.so动态库文件


这个testmath.c

#include <stdio.h>
#include <stdlib.h>
#include "dlfcn.h"

int main(void) {
    
    void * handle;
    int (*fcn) (int x, int y);
    const char * errmsg;

    handle = dlopen("./lib_math.so", RTLD_NOW);
    if(handle == NULL) {
        fprintf(stderr, "Failed to load math.so: %s\n", dlerror());
        return 1;
    }
    
    dlerror();
    fcn = dlsym(handle,"add");
    if((errmsg = dlerror()) != NULL) {
        printf("%s\n",errmsg);
        return 1;
    }
    printf("%d\n",fcn(1,5));
    dlclose(handle);
    return 0;

}



运行:

gcc -o testmath testmath.c -ldl


生成: testmath 可执行文件

执行testmath即可。

附上图:

图一:math.c源码

图二:编译math.c

图三:testmath.c源码

图四:编译testmath.c

图五:运行testmath得到结果


收工。




转载于:https://my.oschina.net/lenglingx/blog/659167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值