2013-05-10 2 views
0

Я пытаюсь вызвать функцию «ядро» из функции Разделяемых библиотек, но я получаю:Вызов функции из общей библиотеки

./a.out: symbol lookup error: ./libtest.so: undefined symbol: testf 

кода я использую очень простой, потому что я просто получение в письменной форме разделяемые библиотеки, и это только для целей тестирования: main.h

extern void testf(); 

main.c

#include <stdio.h> 
#include <dlfcn.h> 

extern void testf() 
{ 
    printf("bla bla\n"); 
} 

int main() { 

void *handle = NULL; 
void (*testlib)(void) = NULL; 

handle = dlopen("./libtest.so" ,RTLD_LAZY); 
testlib = dlsym(handle, "testfunc"); 

if (testlib == NULL) 
{ 
    printf("Error: %s \n", dlerror()); 
} 
else 
{ 
    testlib(); 
} 
} 

libtest.c

#include <stdio.h> 
#include "main.h" 

void testfunc() { 

printf("Test plugin\n"); 
testf(); 
} 

И команды, которые я скомпилировать его с:

gcc -fPIC -g -c -Wall libtest.c 
gcc -shared -Wl,-soname,libtest.so.1 -o libtest.so libtest.o -lc 
gcc main.c -ldl 

Можно ли добиться этого? Пытался найти ответ, но не знаю, как правильно сформулировать вопрос, чтобы я мог лучше его искать.

Спасибо!

ответ

0

К сожалению, удалось найти ответ: я был компиляцией основной программы с неправильными параметрами, следует использовать:

gcc main.c -ldl -rdynamic 
0

здесь вы пытаетесь вызвать функцию исполняемого файла из библиотеки. Я думаю, вам на самом деле требуется обратное.

+0

Я пытаюсь вызвать функцию testf() внутри библиотеки, и я хочу testf(), которая должна быть определена за пределами библиотеки, которая ее вызывает. – user1667175

+0

затем перейдите в другую библиотеку – akhil

Смежные вопросы