如何使用 .so 文件作为 c 中的主要参数?

Posted

技术标签:

【中文标题】如何使用 .so 文件作为 c 中的主要参数?【英文标题】:How to use .so files as main arguments in c? 【发布时间】:2019-11-01 14:16:36 【问题描述】:

我必须编写一个 c 程序,在 main 方法中获取一个 .so 文件(共享对象)作为参数,并在其上调用一个函数 f。它期望函数 f 存在于这个库中。我的程序必须适用于任何 .so 文件,所以我不能直接包含它们。

所以通过调用

./myprogram myLibrary.so

myprogram 必须这样做:

int main(int argc, char *argv[]) 
    return argv[1].f();
 

如何实现这一点以及在编译我的代码时我还需要考虑什么?

【问题讨论】:

man dlopenman dlsym 更具体地说:dlopen 需要一个文件名,作为一个字符串。命令行 (argv) 是将字符串传递给程序的好方法。 【参考方案1】:

您正在尝试执行的操作称为库的“动态加载”。在类 Unix 操作系统上,您正在寻找的电话是 dlopen() 。它需要一个文件名和一些标志,并打开指定的共享库。然后,您可以使用dlsym() 例程查找单个符号(如您的函数 f()),然后您可以在程序的其他地方调用它。

【讨论】:

以上是关于如何使用 .so 文件作为 c 中的主要参数?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 如何使用libhdfs.so

请问我有一个.so文件,如何在Linux下编程使用呢?

如何查看DLL中的函数

java调用so文件

C# Specflow:如何在另一个文件夹的类中调用具有动态表作为参数的方法

如何在 makefile 中添加 .c、.cc 和 .so 文件以创建另一个 .so?