如何用c语言实现后期绑定? 任何人都可以提供一个例子。
我认为可以使用dlopen和dlsym实现,但我不确定。如果我错了,请纠正我!
答案 0 :(得分:15)
延迟(AKA动态)绑定与动态加载的模块(dlopen和dlsym的内容)本身没有任何关系。相反,它是关于延迟决定在运行时调用哪个函数。
在C中,这是使用函数指针完成的(这也是几乎任何C ++实现对虚函数的作用)。
模拟这种情况的一种方法是传递函数指针的结构,然后只通过给定的函数指针调用函数。
一个例子:
typedef struct Animal {
void (*sayHello)(struct Animal *a, const char *name);
} Animal;
static void sayQuakQuak( Animal *a, const char *name ) {
printf( "Quak quak %s, says the duck at 0x%x!\n", name, a );
}
/* This function uses late binding via function pointer. */
void showGreeting( Animal *a, const char *name ) {
a->sayHello( a, name );
}
int main() {
struct Animal duck = {
&sayQuakQuak
};
showGreeting( &duck, "John" );
return 0;
}
答案 1 :(得分:1)
@Frerich Raabe:基本的后期绑定机制可以像你说的那样实现,但你可以使用dlopen / dlclose / dlsym和指针来实现类似的功能:
void *libraryHandle;
void (*fp)(void);
if (something)
libraryHandle = dlopen("libmylibrary0.1");
else
libraryHandle = dlopen("libmylibrary0.2");
fp = dlsym(libraryHandle, "my_function");
fp();
我认为这就是本杰明·巴顿正在寻找的。 p>