Вариант ответа Кэри, если вы работаете в системе * nix.dlopen()
открывает вашу библиотеку.RTLD_LAZY
говорит загрузчику не пытаться сразу разрешить все символы библиотеки и ждать, пока вы попытаетесь получить к ним доступ.dlsym()
ищет рассматриваемый символ.
Редактировать: Обновлен фрагмент, чтобы он лучше подходил к вашим пояснениям:
#include <dlfcn.h>
int main(int argc, char *argv[])
{
void *handle = dlopen("libexample.so", RTLD_LAZY);
if (handle == NULL) {
// error
}
char fct_name[64];
// read input from terminal here
void *func = dlsym(handle, fct_name);
if (func != NULL) {
// call function here; need to cast as appropriate type
}
}
libexample.so будет библиотекой сваши функции, скомпилированные как разделяемая библиотека, вот так:
gcc -Wall -o libexample.so example.c -shared -fPIC
При этом, если вы собираетесь скомпилировать разделяемую библиотеку, как это, вы, вероятно, просто захотите вызватьфункции в вашем бинарном.Это можно сделать, если вы связываете свою библиотеку во время компиляции:
gcc -Wall -o test test.c -L. -lexample
-L.
говорит компоновщику искать библиотеки в текущем каталоге (.
), а -lexample
сообщает емуссылка с библиотекой с именем "libexample.so".Если вы сделаете это, вы можете просто вызывать библиотечные функции прямо в вашей программе.