Linux调用so库文件里面的指定函数

Posted yyqng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux调用so库文件里面的指定函数相关的知识,希望对你有一定的参考价值。

代码示例:

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

typedef int(*Func)(void*);
int callFunc(dtInterp_t a)

    void* handle = dlopen("*.so", RTLD_LAZY);
    Func func = (Func)dlsym(handle, "funcName");
    func(a);
    dlclose(handle);
    return 0;

 

Linux Linux程序练习六

题目:实现一个so库文件名称为listupper.so,so文件中实现一个函数,函数名为void upper(const char *src, char *desc),
调用update后将参数src所指向的字符串中所有字符转化为大写字母,结果放入desc字符串中。分别用C语言编写一个程序test1,
调用libupper.so中的upper函数,用C++语言编写一个程序test2,调用libupper.so中的upper函数。

 

upper.h

#ifndef _upper
#define _upper

//兼容g++编译器
#ifdef __cplusplus
extern "C"
{
#endif
void upper(const char * src,char *desc);
#ifdef __cplusplus
}
#endif

#endif

 

 

upper.c

/*
 根据函数签名分析,desc是调用函数分配内存
 */
#include <stdio.h>
void upper(const char * src,char *desc)
{
    if(src==NULL||desc==NULL)
    {
        printf("传入参数不可以为空!\\n");
        return;
    }
    while(*src)
    {
        if(*src>96&&*src<123)
        {
            //说明该字符是小写字母
            *desc++=*src-32;
            src++;
        }else
        {
            *desc++=*src++;
        }
    }
}

 

test1.c

#include <stdio.h>

#include <unistd.h>

#include "upper.h"

int main(int arg,char * args[])
{
    printf("请输入不超过100个字节大小的字符串!\\n");
    char buf[100]={0};
    char desc[100]={0};
    int num=0;
    num=read(STDIN_FILENO,buf,sizeof(buf));
    if(num==0) return 0;
    upper(buf,desc);
    printf("\\n用户输入的字符串是:%s",desc);
    return 0;
}

 

运行结果

以上是关于Linux调用so库文件里面的指定函数的主要内容,如果未能解决你的问题,请参考以下文章

Linux Linux程序练习六

java加载dll文件

linux c++ 怎么 调用自己函数的

Xamarin 怎么调用java的 so文件

linux中动态库libXXX.so

在Linux环境下,使用ifortran编译 带有结构的和.inc头文件 的fortran项目生成.so文件