>>Возникла проблема при компиляции программы, связанная с проверкой типов данных. >> >>Код: >> >>#include<dlfcn.h> >>#include<stdio.h> >> >>typedef void (*simple_demo_function)(void); >> >> >>int main(void) >> { >> const char *error; >> void *module; >> simple_demo_function demo_function; >> module = dlopen("libhello.so", RTLD_LAZY); >> if (!module) >> { >> fprintf(stderr, "Couldn't open libhello.so: %s\n", error); >> >> } >> >> dlerror(); >> demo_function = dlsym(module, "hello"); >> if ((error = dlerror())) >> { >> fprintf(stderr, "Couldn't find hello: %s\n", error); >> >> } >> >> (*demo_function)(); >> dlclose(module); >> return 0; >>} >> >>Использую компилятор g++(при gcc такой ошибки не возникает, но мне необходимо использовать >>g++ или c++) >> >>g++ -fPIC -g -c libhello.c >>g++ -g -shared -ldl -Wl,-soname,libhello.so.0 -o libhello.so.0.0 libhello.c -lc >>ln -sf libhello.so.0.0 libhello.so >>g++ -g -c demo.c -o demo.o >>g++ -g -o demo demo.o -L. -lhello >> >>Выдает: >> >>libhello.c:5:3: warning: no newline at end of file >>libhello.c:5:3: warning: no newline at end of file >>demo.c: In function `int main()': >>demo.c:19: error: invalid conversion from `void*' to `void (*)()' >> >> >>Долго парился, искал по всему инету - ничего не нашел. >> >>Помогите, плиз, если не составит труда. >>Может какой-нибудь флажок поставить нужно, чтобы отключить жесткую проверку типов или еще >>чего-нибудь :) >> >>Заранее респект! > > >Строка: > >demo_function = dlsym(module, "hello"); > >dlsym возвщает void*, a demo_function имеет тип void(*)(). > >Попробуйте что-то вроде этого: > >demo_function = (simple_demo_function)dlsym(module, "hello"); > >т.е., явно приведите тип значения возвращаемого dlsym() к simple_demo_function, может поможет. > > > >К сожалению, это не помогло(ошибок компиляции нет, но появилась ошибка при выполнении программы)... хотя была надежда =( Выдает ошибку: Couldn't find hello: ./libhello.so.0: undefined symbol: hello Segmentation fault Я даже обновил gcc до последней версии ... не помогло. Неужели ни у кого нет опыта по этому вопросу... =( Готовлю веревку и мыло :(
|