[질문]동적 라이브러리에 관해서

익명 사용자의 이미지

이곳에 있는 자료를 보면서 동적 라이브러리를 만들어보려고 하는데
자꾸 에러가 나오네요.
// 라이브러리 파일 (libenc.so)
void Initial (int i, int j) {
.....
}

// 메인 (enc.c)
void main (){
int i, j;
void (*Init)();

en = dlopen("/usr/local/lib/libenc.so", RTLD_LAZY);
Init = dlsym(en, "Initial"); <==== (1)
(*Init)(i, j); <==== (2)
.......
}

이런식으로 작성을 했는데
gcc -o enc enc.c -ldl 로 컴파일을 하면
(1)에선 cannot convert 'void *' to 'void (*)()' in assignment
(2)에선 too many arguments to function
이라는 에러가 나옵니다.
라이브러리가 잘못 작성된거는 아닌거 같은데 원인을 모르겠네요.
알려주셨으면 감사하겠습니다.

익명 사용자의 이미지

함수 프로토타입을 제대로 사용하지 않은 문제 같네요.

void main (){
int i, j;
void (*Init)( int i, int j ); /* 함수 인자 수정 */

en = dlopen("/usr/local/lib/libenc.so", RTLD_LAZY);

/* dlsym 이 void* 를 리턴하므로 캐스팅 필요 */
Init = (void(*)(int,int))dlsym(en, "Initial"); <==== (1)

/* 함수 인자 수정 했으므로 문제 없음 */
(*Init)(i, j); <==== (2)
.......
}