나는 여기에서 질문하는 것을 정말로 싫어한다. 그러나 나는 some of the other posts을보고 있었고이 솔루션과 같은 솔루션은 작동하지 않는 것 같습니다. 아마 구문에 대한 오해.Dlsym : 다른 크기의 정수에서 포인터로 캐스트
나는 내 오래된 코드를 향상시키고있다. 질문에있는 함수는로드 된 일부 모듈을 순환하고 함수를 실행합니다. 이 코드는 제가 x86에 있었을 때 완벽하게 작동했지만 64 비트로의 점프는 모든 것을 망쳐 놨습니다.
exec/src/input.c:98:18: warning: cast to pointer from integer of different size
물론 내 프로그램 세그먼테이션 폴트 (segfault) :
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;
}
나는 다음과 같은 경고를 얻을. 이것이 캐스팅 문제 일 뿐이라는 것을 알고 있지만, 쉽고 이식 가능한 솔루션을 모르겠습니다. 더 이상 정보가 필요하면 알려주세요. 감사.
여기에서 묻는 질문은 싫어서는 안되며, 이는 주로이 웹 사이트의 목적입니다. – dreamlax
@dreamlax : 싫어하고 싫어하는 것에는 차이가 있습니다. 당신이 미숙 한 것에 건설적으로 불만을 품는다는 것을 의미해야한다는 것을 싫어합니다. 미워하는 것은 실제로 개선해야 할 도움을 요청하는 것을 꺼려한다는 것을 의미합니다. –