Как может, позднее связывание может быть достигнуто на языке C? может кто-либо обеспечивать пример.
я думаю, что это может быть достигнуто с помощью dlopen и dlsym, но я не уверен в it.please, исправляют меня, если я неправ!
Позднее (оно же динамическое) связывание не имеет ничего общего с динамически загружаемыми модулями (именно об этом говорят 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;
}
@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();
Я думаю, это то, что ищет Бенджамин Баттон.