동적 라이브러리 로드 문제 ?
안녕하세요.
동적 라이브러리와 함수 포인터에 관련한 문제입니다.
리눅스에서는 문제가 없는데 AIX C (xlc)컴파일러에서 문제가 생겼습니다.
내용을 보시고 조언좀 부탁드립니다.
dlopen() 함수 까지는 문제가 없는데, dlsym() 함수에 의한 리턴 값을 받
을 때
타입이 일치하지 않는다는 에러 메시지를 표시합니다.
다음은 에러 메지시와 소스입니다.
line 1053.26 1506-068 (E) Operation between types "unsigned short(*)
(struct {...}*)" and "void*" is not allowed.
line 1064.27 1506-068 (E) Operation between types "unsigned short(*)
(void)" and "void*" is not allowed.
소스 일부분...
// 리턴 값 변수
void * g_hModule=NULL;
// 함수 포인터 선언
STATUS (*g_pEMHandlerProc)( EMRECORD FAR * pExRecord );
STATUS (*g_pMainEntryPoint)( void );
// 라이브러리 열기
g_hModule = dlopen ("libtest.a", RTLD_LAZY);
/* line 1053 */
g_pEMHandlerProc = dlsym(g_hModule, "EMHandlerProc");
/* line 1064 */
g_pMainEntryPoint = dlsym(g_hModule, "MainEntryPoint");
수고하세요...
Type casting 문제 같은데요.....
dlsym 함수가 return type 이 void * 같군요..., ( 사용해 본적이 없어
서 ㅡㅡ? )
그래서 원형의 Type casting 을 해주면 될것 같군요.., ( compiler 가 민
감하게 동작을 해서 그런것 같으니깐..... )
댓글 달기