여러 라이브러리에 같은 이름의 함수가 있다면...
글쓴이: mg2000 / 작성시간: 화, 2007/10/02 - 7:57오후
A.so, B.so, C.so, D.so, E.so라는 세 라이브러리가 있고요.
A.so는 B.so를 사용하고, C.so는 dlopen을 이용해서 링크하여 사용합니다.
B.so, C.so는 각각 D.so와 E.so를 링크하고 있는데요.
D.so와 E.so는 ABC()라는 동일한 이름의 함수를 가지고 있습니다.
(물론 하는 일은 다릅니다. 둘다 외부에 노출되어 있는 함수)
그런데 문제는 제가 A.so에서 C.so에 있는 DD()를 호출하는데, DD()는 E.so의 ABC()를 호출합니다.
그래서 실제 실행결과도 그렇게 나오겠거니 생각했는데 이게 왠걸....
D.so의 ABC()를 호출해서 실행하는 것입니다.
같은 이름의 함수가 있다면, dlopen()으로 불린 함수가 우선순위에서 밀리게 되는 것인지...
왜 E.so를 안 부르는지 답답하네요.
Forums:
dlopen()이 반환한
dlopen()이 반환한 handle로 dlsym()을 부르는 데 그런가요?
네. 그렇습니다.
C.so를 dlopen하고 그 핸들로 dlsym함수를 이용해 ABC()함수를 호출하는데 그렇습니다.
E.so의 DD()를 안부르고, D.so의 DD()를 호출하네요.
꼭 dlopen이 아니라도
B.so C.so를 둘다 dlopen 안쓰고 링크해도,
DD()함수의 위치를 헷갈려 하는 것 같네요.. ㅜ.ㅜ
댓글 달기