我必须编写一个c程序,该程序在主方法中获取一个.so文件(共享对象)作为参数,并在其上调用函数f。它期望函数f存在于此库中。我的程序必须可以处理任何.so文件,因此无法直接包含它们。
因此致电
./myprogram myLibrary.so
myprogram必须执行以下操作:
int main(int argc, char *argv[]) {
return argv[1].f();
}
如何实现此目标?在编译代码时还需要考虑什么?
答案 0 :(得分:6)
您要尝试的操作称为库的“动态加载”。在类似Unix的操作系统上,您要寻找的呼叫是dlopen()。它需要一个文件名和一些标志,并打开指定的共享库。然后,您可以使用dlsym()
例程来查找各个符号(例如函数f()),然后可以在程序的其他位置调用它们。