동적 라이브러리 로드 문제 ?

익명 사용자의 이미지

안녕하세요.

동적 라이브러리와 함수 포인터에 관련한 문제입니다.

리눅스에서는 문제가 없는데 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");

수고하세요...

익명 사용자의 이미지

dlsym 함수가 return type 이 void * 같군요..., ( 사용해 본적이 없어
서 ㅡㅡ? )

그래서 원형의 Type casting 을 해주면 될것 같군요.., ( compiler 가 민
감하게 동작을 해서 그런것 같으니깐..... )