我真的很讨厌在这里提问。但我一直在关注some of the other posts,而这样的解决方案似乎不起作用。这可能是我对语法的误解。
我正在改进我的一些旧代码。问题中的函数循环一些加载的模块并运行一个函数。当我在x86上时,这段代码运行得非常好,但是跳到64位就是搞砸了所有东西。
int FindCmd(ArgS *Args)
{
/* We need to check our loaded modules for the appropriate command. */
int found = 0;
ModS *Current;
for(Current = Modules; Current != NULL; Current = Current->Next)
{ /* Cycle through the modules. */
int (*OnConsoleCmd)(RootS *IRC, ArgS *Args, McapiS *Mcapi);
/* The below statement is the problem. */
OnConsoleCmd = (int (*)(RootS *, ArgS *, McapiS *))dlsym(Current->Handle, "OnConsoleCmd");
/* The above statement is the problem. */
if(OnConsoleCmd != NULL)
{
if(OnConsoleCmd(IRC, Args, Mcapi) != 0) /* Run command. */
found++;
}
}
return found;
}
我收到以下警告:
exec/src/input.c:98:18: warning: cast to pointer from integer of different size
当然我的程序是段错误。我知道这只是一个演员问题,但我不知道一个简单易用的解决方案。如果您需要更多信息,请告诉我。感谢。
答案 0 :(得分:3)
这很可能是因为你在范围内没有dlsym()
的原型,因此它被隐式声明为int dlsym()
,这是错误的。
如果您将#include <dlfcn.h>
添加到使用dlsym()
的文件中,您将获得正确的声明,它应该可以正常工作。