[FBHQ] 동적라이브러리 검색하는 순서.

bizzare의 이미지

윈도우에서는 다음과 같은 순서로 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 에서는 제가 아직 확인해보지 못했습니다.
그럼 답변 부탁드립니다.

cinsk의 이미지

Quote:
하지만 저는 path를 추가했다면 추가된 path가 먼저 검색되고 LD_LIBRARY_PATH를 검색하는 것이 더 좋은 순서라고 생각합니다. (실제로 윈도우에서는 그렇게 하고 있고요)

왜 그렇게 생각하시나요? Windows에서 그렇게 한다고 더 좋은 순서라는 건 설득력 있는 이유가 아닌 것 같습니다.

그리고 LD_LIBRARY_PATH로, 기존의 search order를 바꿀 수 있다는 것은, 아주 매력적인 일입니다. 왜냐하면, version conflict나 기타 상황에서 사용자가 shared library를 지정할 수 있기 때문입니다.

또한, Windows는 보통 패키지 단위로 디렉토리가 생성되고, 관련 파일이 모두 설치되지만, 실행 파일은 bin/, 라이브러리는 lib/에 설치되는 UNIX 특성상, "현재 디렉토리를 뒤지는" 방식은 큰 의미가 없습니다.

체스맨의 이미지

current directory 를 찾게 하려면, . 을 검색 경로에 추가하면 될 것이구요.

Quote:

다음 순서로 검색하는 것 같습니다.

1) LD_LIBRARY_PATH
2) 추가된 path

이 순서를 바꾸는 건 잘 모르겠지만 어차피 윈도에서도 PATH 환경 변수로 탐색 경로를 추가하는 것 아닌가요? 그렇다면 LD_LIBRARY_PATH 에 추가하는 것과 별반 다를 게 없을 것 같은데요... 윈도 실행 파일에도 DLL 탐색 경로를 추가할 수 있던가요?

덧붙여, 현재 경로를 먼저 탐색하는 게 항상 좋다고 보긴 어렵습니다. 보안상 문제도 있을 수 있구요.

Orion Project : http://orionids.org

익명 사용자의 이미지

상황상 꼭 필요해서 그럽니다.

테스트 개발환경을 만드는데,

current directory 에 테스트용으로 만든 A.so가 있으면 그것을 로드하고
만일 current directory에 A.so가 없으면
LD_LIBRARY_PATH에 있는 오리지널 A.so를 쓰도록 하는 환경을 만들고 있기때문에

반드시 순서를 바꿔야 합니다.

wafe의 이미지

체스맨님께서 말씀하신대로 LD_LIBRARY_PATH 제일 앞에 현재 디렉토리를 추가하면 되지 않나요?

Heejoon Lee

익명 사용자의 이미지

질문자 wrote:
상황상 꼭 필요해서 그럽니다.

테스트 개발환경을 만드는데,

current directory 에 테스트용으로 만든 A.so가 있으면 그것을 로드하고
만일 current directory에 A.so가 없으면
LD_LIBRARY_PATH에 있는 오리지널 A.so를 쓰도록 하는 환경을 만들고 있기때문에

반드시 순서를 바꿔야 합니다.

그렇다면, 라이브러리 올리기 전에, 디렉터리 및 환경변수들을 파라메터로 각 라이브러리의 존재유무를 판단(어느것을 바이드할지도 결정)하게 하고 라이브러리를 로딩하게 코딩하는 것은 어떻습니까?

* 제가 보기에는 지금 추구하시는 방법이 융통성이 있어보이기도 하지만, 부작용이 더 걱정되는 방법으로 보입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.