2011-08-29 4 views
0

코드를 작성하려고하는데 void 함수가 있습니다. 정보.어떻게 외부 함수를 호출하나요?

void info(char *,char *); 

이것은 주 함수에서 별도의 파일로 호출하려고합니다. so 파일을 열기 위해 dlopen을 사용하고 싶습니다. 어떻게 함수를 호출할까요 : info. 내 다른 파일 에서요?

나는

info("testing: ","Success"); 

내가 내 정보 기능에 정의되지 않은 참조 오류가 사용하는 것을 시도하고있다.

+1

는 "정의되지 않은 참조"는 링커 오류가 아닌 컴파일러 오류입니다. 컴파일 및 링크의 기본 사항을 다시 읽고 모든 번역 단위를 연결하는 방법을 다시 확인하십시오. –

+0

함수의 서명은이를 호출하는 방법을 설명하는 데 충분한 정보를 제공하지 않습니다. 그러나 함수의 요구 사항을 모르는 경우 사용하면 안됩니다. 해결책은 있습니다. –

답변

1

일반적인 경로는 다음과 같이이다 :

/* Set up a typedef for the function pointer to make the code nicer */ 
tyepdef void(*Info_ptr)(char*, char*); 
/* Get the function, lib must be the dlopened library.*/ 
Info_ptr info; 
info = (Info_ptr)dlsym(lib, "info"); 
/* Use the function pointer */  
(*info)("testing: ", "Success"); 

tute 여기를 알 OOK을 가지고 : http://tldp.org/HOWTO/html_single/C++-dlopen/

+0

이제는 '정의되지 않은 심볼 : 정보'라고 말했습니다. –

+0

.so에서 여러분이 기대하는 심볼을 가지고 있는지 확인하십시오. 당신은 그것을 돕기 위해'nm'을 사용할 수 있습니다. 만약 당신의'info' 함수가 C++이라면, 튜토리얼에서와 같이'extern "C"를 사용하여 설정해야합니다. –

+0

고마워요. 일단 기능 정보를 수정하면 도움이되었습니다. –

관련 문제