컴파일 옵션 -L 에 대하여.(기초적인 질문)

blueski의 이미지

우선 다움과 같은 코드를 만들었습니다. 화일 이름은 test.c 입니다.

#include <stdio.h>

int main() {
   printf("test \n");
   return 0;
}

이렇게 한 후에 gcc test.c 하였더니 a.out 이라는 실행 화일이 만들어 졌습니다.
ldd a.out 하였더니 다음과 같은 결과과 나왔습니다.

Quote:

libc.so.6 => /lib/libc.so.6 (0x40021000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

위의 해당 라이브러리를 다른 /tmp/lib 라는 디렉토리에 복사를 하였습니다.
그런다음 다시 컴파일을 하였습니다.
gcc -L/tmp/lib test.c
그런데 이렇게 하여도 ldd a.out 한 결과가 위와 같았습니다.
즉, 라이브러리를 /tmp/lib 에서 찾은게 아니라 그대로 /lib 에서 찾았다는 말이죠.
왜 그렇죠?
-L 옵션이 라이브러리의 디렉토리 변화시키는거 아닌가요?

너무 기초적인 질문인가요? TT

IsExist의 이미지

ldd는 실행파일의 so 목록을 LD_LIBRARY_PATH 에서 찾습니다.

static 링크를 할려면 -static 옵션을 주셔요.

Quote:

$ echo $LD_LIBRARY_PATH

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

blueski의 이미지

IsExist wrote:
ldd는 실행파일의 so 목록을 LD_LIBRARY_PATH 에서 찾습니다.

static 링크를 할려면 -static 옵션을 주셔요.

Quote:

$ echo $LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH 를 하면 아무것도 안 나오거든요.
즉, 해당 변수는 지정되지 않은 상태인듯 합니다.
익명 사용자의 이미지

blueski wrote:
IsExist wrote:
ldd는 실행파일의 so 목록을 LD_LIBRARY_PATH 에서 찾습니다.

static 링크를 할려면 -static 옵션을 주셔요.

Quote:

$ echo $LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH 를 하면 아무것도 안 나오거든요.
즉, 해당 변수는 지정되지 않은 상태인듯 합니다.

ld.so.conf에 지정된데서 맨처음 찾습니다
여기서 못찾으면 그 환경변수에 지정된거 찾고

blueski의 이미지

Anonymous wrote:
blueski wrote:
IsExist wrote:
ldd는 실행파일의 so 목록을 LD_LIBRARY_PATH 에서 찾습니다.

static 링크를 할려면 -static 옵션을 주셔요.

Quote:

$ echo $LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH 를 하면 아무것도 안 나오거든요.
즉, 해당 변수는 지정되지 않은 상태인듯 합니다.

ld.so.conf에 지정된데서 맨처음 찾습니다
여기서 못찾으면 그 환경변수에 지정된거 찾고

/etc/ld.so.conf 화일을 보면
/usr/X11R6/lib
만 있거든요.
게다가 위에서 말씀드린대로 $LD_LIBRARY_PATH 에는 아무것도 지정되어 있지 않고...
제 생각엔 기본적으로 /lib, /usr/lib 를 먼저 찾는것 같거든요.
그렇다면 /lib 디렉토리에 있는 라이브러리를 임의의 다른 디렉토리에 이동시켜서 그 위치를 컴파일시에 지정하여 사용하게 할수 없는가가 제 질문입니다.

codebank의 이미지

제가 알기론 ld에서는 시스템의 기본 lib path를 찾아보고 사용자 path를 찾는다고
알고 있습니다.
즉, 해당되는 라이브러리는 시스템 기본 라이브러리이므로 사용자가 다른 디렉토리에
복사를하고 지정을해도 시스템에 있는 기본 라이브러리로 적용된다고 생각합니다.
혹시 모르니 -L/tmp/lib보다는 -l/tmp/lib/libc.so.6 으로 한번 도전해보시죠.
(안될 수도 있겠지만... :oops: )

P.S. : 프로그램관련 질문이라 게시판을 옮겼습니다.

------------------------------
좋은 하루 되세요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.