21xrx.com
2024-06-03 06:07:28 Monday
登录
文章检索 我的文章 写文章
如何在C++中调用自己编译的so库
2023-07-12 02:00:11 深夜i     --     --
C++ 调用 自编译 so库 程序设计

在C++开发中,有时候需要使用已经编写好的so库,但是如果自己编写了so库,如何在C++中调用呢?下面将介绍具体的方法。

首先,编写好so库。在编译生成so库的过程中,需要注意指定编译选项和编译目标平台。比如,使用以下命令生成so库:


g++ -o mylib.so -shared -fPIC mylib.cpp

其中,-o指定输出文件名,-shared表示生成共享库,-fPIC指定生成位置无关代码。

接下来,在C++中调用so库。需要在C++代码中使用dlopen函数和dlsym函数,以动态方式调用so库。具体代码见下:


#include <stdio.h>

#include <dlfcn.h>

int main() {

  // 打开so库

  void* handle = dlopen("./mylib.so", RTLD_LAZY);

  if (!handle) {

    printf("Cannot open library: %s!\n", dlerror());

    return 1;

  }

  // 找到so库中的函数

  typedef int(*MyFunction)(int);

  MyFunction my_function = (MyFunction)dlsym(handle, "my_function");

  if (!my_function) {

    printf("Cannot load symbol 'my_function': %s!\n", dlerror());

    dlclose(handle);

    return 1;

  }

  // 调用so库中的函数

  int result = my_function(10);

  printf("Result: %d\n", result);

  // 关闭so库

  dlclose(handle);

  return 0;

}

以上代码首先使用dlopen函数打开.so文件,并检查是否成功。接着使用dlsym函数查找指定的函数符号,并把它传递给一个函数指针变量。最后,通过函数指针调用so库中的函数,并在控制台输出结果。

需要注意的是,在调用完so库后,需要调用dlclose函数关闭so库,以释放资源。

总结起来,调用自己编译的so库需要使用dlopen和dlsym函数,在调用so库函数后还需要调用dlclose函数释放资源。当然,在生成so库时也需要指定编译选项和编译目标平台。通过以上方法,就可以顺利地在C++中调用自己编写的so库。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复