[FBHQ] 동적라이브러리 검색하는 순서.
글쓴이: bizzare / 작성시간: 화, 2006/02/21 - 9:39오전
윈도우에서는 다음과 같은 순서로 dll을 검색하지요.
1) dll을 로드하려는 녀석의 current directory 2) windows의 current directory 3) system path 4) windows path 5) path 환경변수에 등록된 곳들
그런데 HP에서는 그렇지 않은 것 같더군요.
일단 default로 만들었을 경우에는
오직 LD_LIBRARY_PATH 만 검색하는 듯 하고,
-Wl,+b,pathlist 옵션을 이용해서 검색 path를 추가할 경우,
다음 순서로 검색하는 것 같습니다.
1) LD_LIBRARY_PATH 2) 추가된 path
하지만 저는 path를 추가했다면 추가된 path가 먼저 검색되고 LD_LIBRARY_PATH를 검색하는 것이 더 좋은 순서라고 생각합니다. (실제로 윈도우에서는 그렇게 하고 있고요)
이와 같은 방식으로 이 순서를 바꿔줄 방법이 있을까요?분명히 있을거라고 생각하긴 하는데,
방법을 모르겠습니다.
IBM, SUN 에서는 제가 아직 확인해보지 못했습니다.
그럼 답변 부탁드립니다.
Forums:
[quote]하지만 저는 path를 추가했다면 추가된 path가 먼저 검
왜 그렇게 생각하시나요? Windows에서 그렇게 한다고 더 좋은 순서라는 건 설득력 있는 이유가 아닌 것 같습니다.
그리고 LD_LIBRARY_PATH로, 기존의 search order를 바꿀 수 있다는 것은, 아주 매력적인 일입니다. 왜냐하면, version conflict나 기타 상황에서 사용자가 shared library를 지정할 수 있기 때문입니다.
또한, Windows는 보통 패키지 단위로 디렉토리가 생성되고, 관련 파일이 모두 설치되지만, 실행 파일은 bin/, 라이브러리는 lib/에 설치되는 UNIX 특성상, "현재 디렉토리를 뒤지는" 방식은 큰 의미가 없습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
Re: [FBHQ] 동적라이브러리 검색하는 순서.
current directory 를 찾게 하려면, . 을 검색 경로에 추가하면 될 것이구요.
이 순서를 바꾸는 건 잘 모르겠지만 어차피 윈도에서도 PATH 환경 변수로 탐색 경로를 추가하는 것 아닌가요? 그렇다면 LD_LIBRARY_PATH 에 추가하는 것과 별반 다를 게 없을 것 같은데요... 윈도 실행 파일에도 DLL 탐색 경로를 추가할 수 있던가요?
덧붙여, 현재 경로를 먼저 탐색하는 게 항상 좋다고 보긴 어렵습니다. 보안상 문제도 있을 수 있구요.
Orion Project : http://orionids.org
[재차 질문] 흑. 꼭 필요한 상황이라서 그럽니다.
상황상 꼭 필요해서 그럽니다.
테스트 개발환경을 만드는데,
current directory 에 테스트용으로 만든 A.so가 있으면 그것을 로드하고
만일 current directory에 A.so가 없으면
LD_LIBRARY_PATH에 있는 오리지널 A.so를 쓰도록 하는 환경을 만들고 있기때문에
반드시 순서를 바꿔야 합니다.
체스맨님께서 말씀하신대로 LD_LIBRARY_PATH 제일 앞에 현재 디
체스맨님께서 말씀하신대로 LD_LIBRARY_PATH 제일 앞에 현재 디렉토리를 추가하면 되지 않나요?
Heejoon Lee
Re: [재차 질문] 흑. 꼭 필요한 상황이라서 그럽니다.
그렇다면, 라이브러리 올리기 전에, 디렉터리 및 환경변수들을 파라메터로 각 라이브러리의 존재유무를 판단(어느것을 바이드할지도 결정)하게 하고 라이브러리를 로딩하게 코딩하는 것은 어떻습니까?
* 제가 보기에는 지금 추구하시는 방법이 융통성이 있어보이기도 하지만, 부작용이 더 걱정되는 방법으로 보입니다.
댓글 달기