>Возникла проблема при компиляции программы, связанная с проверкой типов данных. > >Код: > >#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, может поможет.
|