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

时间:2019-06-18 21:52:42

标签: c arguments shared-libraries main

我必须编写一个c程序,该程序在主方法中获取一个.so文件(共享对象)作为参数,并在其上调用函数f。它期望函数f存在于此库中。我的程序必须可以处理任何.so文件,因此无法直接包含它们。

因此致电

./myprogram myLibrary.so

myprogram必须执行以下操作:

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

如何实现此目标?在编译代码时还需要考虑什么?

1 个答案:

答案 0 :(得分:6)

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