【问题标题】:dlsym - "Too many arguments to function" errordlsym - “函数参数太多”错误
【发布时间】:2017-02-13 09:53:17
【问题描述】:

我正在做一个涉及动态加载共享库的 C 练习。当我使用gcc -o test2 test2.c -ldl 命令编译我的测试程序时,我得到一个错误:

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);,它本身就可以正常工作。

什么可能导致这个问题?

【问题讨论】:

  • 声明void (*test)(void)表示该函数不带参数。
  • @Barmar 所以应该是void (*test)(double*, int);?抱歉问了这么荒谬的问题,我现在觉得 dlsym 有点太混乱了……
  • 我猜你在看到我的回答之前就写了那条评论。
  • dlsym 与此无关,您可以将其从代码中完全删除并得到相同的错误,因此请也将其从问题中删除。

标签: c dynamic shared-libraries .so


【解决方案1】:

函数指针声明必须与实际函数的声明相匹配。所以应该是:

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

您的声明表明该函数不接受任何参数,因此当您使用参数调用它时会出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2018-04-22
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多