[질문] dlopen
글쓴이: bizzare / 작성시간: 화, 2005/10/25 - 10:08오후
dlopen을 쓰는데 정말 괴롭습니다.
libTest.so 라는 파일을 만들어서 로드하는데,
dlopen("libTest.so", RTLD_LAZY);
로 로드하고 있습니다.
그런데 어쩔 때는 로드되고 어쩔 때는 로드가 안되는군요 -_-;
제 생각에 로드되는 순간의 working directory가 영향을 주는 것 같아서 full path 로
dlopen("/home/user/test/libTest.so");
로 호출을 했더니
아예 로드가 안되는군요. -_-;
Full Path는
지원이 안되는 것인가요? -_-;
또한 문제없이 로드가 잘 되려면 어떻게 해야하나요?
참고로 dlopen소스가 포함된 실행파일은
LD_LIBRARY_PATH=:/home/user/test/:$LD_LIBRARY_PATH a.out
로 하여 실행하고 있습니다.
Forums:
Re: [질문] dlopen
정말 깨끗하고 멋진 프로그램을 짜고 싶습니다.
OS390이나 AIX에서는 LIBPATH를 사용합니다. * 참고로
OS390이나 AIX에서는 LIBPATH를 사용합니다.
* 참고로, 다른 시스템에서 LD_LIBRARY_PATH 를 좀 ... 많이 쓰지요.
....---------------------------2. 참고
....
---------------------------
2. 참고.
1) 공유라이브러리 경로지정을 위한 운영체제별 차이.
* 리눅스 : LD_LIBRARY_PATH
* 솔라리스 : LD_LIBRARY_PATH , LD_LIBRARY_PATH_64
* HPUX : SHLIB_PATH, LD_LIBRARY_PATH
* Tru64 : LD_LIBRARY_PATH
* AiX : LIBPATH
* SGI : LD_LIBRARY_PATH, LD_LIBRARYN32_PATH, LD_LIBRARY64_PATH
* Win32 : PATH
* MacOS X : DYLD_LIBRARY_PATH, DYLD_FALLBACK_LIBRARY_PATH
* VMS :SYS$SHARE
* OS390 : LIBPATH
-----------------------------------
...
사용하시는 환경은 모르겠지만
글을 올렸었는데 틀린 내용이 있어서 전부 정정합니다..
지난 글은 잊어주세요 ^^;;;
저는 리눅스에서 테스트를 했구요
/home/me/libadd.so 로 파일을 만들었구요
test.c 라는 파일을 만들어서 아래 내용을 코딩하고
gcc -o test test.c -ldl
로 컴파일하고 돌리면 그냥 잘 돕니다.
LD_LIBRARY_PATH 같은 것은 전혀 설정하지도 않았습니다.
Re: 사용하시는 환경은 모르겠지만
linux라면, ldconfig를 사용해서 LD_LIBRARY_PATH에
linux라면, ldconfig를 사용해서 LD_LIBRARY_PATH에 등록하지 않고 사용할 수 있는데, 아마도 그 경우로 보입니다.
# /sbin/ldconfig -v 로 확인해 보시기 바랍니다.
많은 답변 감사드립니다.
많은 도움이 되었습니다. :-) :)
정말 깨끗하고 멋진 프로그램을 짜고 싶습니다.
aix라면
AIX에서 동적 라이브러리가 .so파일이였던가요?
오래된 제 기억속에는 .a라는 이름이였던 걸로 기억합니다.
(어처구니 없죠? 일반 static lib랑 동일하니..)
/usr/lib를 살펴보시면 libc.so가 존재하는지 어떻게 되어 있는지
확인한번 해보세요. libc.a파일만 존재하면 뭐 두말할 필요도
없겠지요..
저도 맨처음 동적 라이브러리 만들면서 당황했다는
그리고 AIX에서 dlopen사용시 LD_LIBRARY_PATH랑은 전혀 상관없었습니다.
댓글 달기