Здравствуйте, artem_kos, Вы писали:
_>int main(int argc,char *argv[])
_>{
_> double (*cosine)(double);
_> void *handle = dlopen("/usr/lib/libm.so",RTLD_LAZY);
_> if(handle == NULL)
_> {
_> printf("error");
_> exit(1);
_> }
_> cosine = dlsym(handle,"cos"); ///// на этой строчке ошибка
_> if(cosine == NULL)
_> {
_> printf("error");
_> exit(1);
_> }
_> printf("%f",(*cosine)(2.0));
_> dlclose(handle);
_>}
_>error: invalid conversion from `void*' to `double (*)(double)'
Дело в том, что функция dlopen возвращает указатель на void, который нужно явным образом привести
к типу твоей функции:
cosine = (double (*)(double))dlsym(handle,"cos");
а еще лучше определить тип указателя на функцию с нужной тебе сигнатурой:
typedef double (*cos_ptr_func)(double); // объявление типа указателя на функцию, cos_ptr_func - имя типа
cos_ptr_func cosine = (cos_ptr_func)dlsym(handle,"cos");
P.S. Для оформления кода в сообщении лучше использовать тэг [ccode], это повышает читаемость.