Я прочитал несколько уроков по загрузке общих библиотек и вызову в них функций.У меня получилось по обоим пунктам.Есть только одна вещь, которую я не видел ни в одном из учебных пособий:
Как вернуть значение из функции в общей библиотеке в основной код?
Это моя общая библиотекаsource:
#include <stdio.h>
char* entry(){
printf("this is a working plugin\n");
return "here we go!";
}
Когда я вызываю его, я получаю «это рабочий плагин» на стандартный вывод.Мой вопрос сейчас, как я могу получить строку «здесь мы идем» обратно в main.c, который выглядит так:
void *lib_handle;
void (*lib_func)();
...
lib_handle = dlopen("/home/tectu/projects/tibbers/plugins.so", RTLD_LAZY);
if(!lib_handle)
error("coudln't load plugins", NULL);
lib_func = dlsym(lib_handle, "entry");
if(!lib_func)
error("coudln't find symbol in plugin library", NULL);
(*lib_func)(); // here i call the entry() from the .so
Что-то вроде этого не работает:
printf("return value: %s\n, (*lib_func)());
Итак, есть идеи?
Спасибо.