2017-02-13 12 views
0

Я выполняю упражнение C, которое требует динамической загрузки разделяемой библиотеки. Когда я компилирую мою тестовую программу, используя gcc -o test2 test2.c -ldl команду, я получаю сообщение об ошибке:dlsym - ошибка «Слишком много аргументов для функции»

test2.c: In function ‘main’: 
test2.c:27:5: error: too many arguments to function ‘test’ 
    (*test)(array, size); 

Это немного, где я получаю ошибку:

void (*test)(void);  
test = dlsym(handle, "lib_fill_random"); 
(*test)(array, size); 

lib_fill_random объявляется с двумя аргументами, как в .h и .c файлы как void lib_fill_random(double *array, int size);, и он отлично работает сам по себе.

Что может быть причиной этой проблемы?

+1

Объявление 'void (* test) (void)' означает, что функция не принимает аргументов. – Barmar

+0

@Barmar Итак, это должно быть 'void (* test) (double *, int);'? Извините за такой смешной вопрос, я просто нахожу dlsym немного запутанным прямо сейчас ... – COLOuRSLIDES

+0

Я думаю, вы написали этот комментарий, прежде чем увидеть мой ответ. – Barmar

ответ

1

Объявление указателя функции должно соответствовать объявлению фактической функции. Так оно и должно быть:

void (*test)(double *, int); 

Ваше заявление гласит, что функция не принимает никаких аргументов, так что вы получите сообщение об ошибке при вызове его с аргументами.

+0

Я вижу! Спасибо за объяснение – COLOuRSLIDES

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