>> Delete No. 62566 article
No. 라이브러리 링크시에 에러에 관하여

등록 2002-12-11 09:56:00 By localhost     조회 5
이름 후지초보    

		안녕하세요. 항상 도움만 받으니 미안한 맘 금함길이 없군요.
언젠가 저도 도움이 될 수 있는 그 날을 꿈꾸며...
다시 한번 도움을 청합니다.
 내용은 다음과 같습니다.
실행파일 ddd는 aaa와 bbb를 링크하여 생성되는 라이브러리 입니다.
이 때 aaa는 a1과a2를 링크하여 생성되는 라이브러리이고.
bbb는 b1과b2를 링크하여 생성되는 라이브러리입니다. 그리고 aaa와 bbb는
모두 공유(-shared)라이브러리로 작성이 되었구요.
근데 실제로 ddd를 생성하려다 보면 aaa는 괜찮지만 bbb의 b1과 b2를
참조할 수 없다는 링크 에러 메세지가 뜹니다. 이미 aaa와 bbb 모두 라이
브러리로 생성이 되어 있는 상태인데도 말입니다.
그래서 LD_LIBRARY_PATH라는 환경변수에다가 b1과 b2가 들어 있는
패스를 지정해 주었더니 이상없이 링크가 성공합니다.
(물론 ddd에는 a1,a2,b1,b2가 들어 있는 디렉토리 패스는 모두 지정
되어 있는 상태입니다.)...
도대체 이현상이 어떤 현상인지 궁금합니다.
 정리 해서 말씀드릴께요.
 1. gcc -o -shared /abc/aaa.so -L/abc -la1 -la2
  --> aaa.so가 /abc디렉토리 밑에 생성된다.
 2. gcc -o -shared /abc/bbb.so -L/abc -lb1 -lb2
  --> bbb.so가 /abc디렉토리 밑에 생성된다.
 3-1. gcc -o /abc/ddd.exe -L/abc -laaa -lbbb
  --> 링크 에러 발생!!!!
gcc -o /abc/ddd.exe -L/abc -laaa -lbbb
/usr/bin/ld: warning: b1.so, needed by /abc/bbb.so, not found
(try using -rpath or -rpath-link)
/usr/bin/ld: warning: b2.so, needed by /abc/bbb.so, not found
(try using -rpath or -rpath-link)
 3-2. export LD_LIBRARY_PATH=/abc
     gcc -o /abc/ddd.exe -L/abc -laaa lbbb
  --> 링크 성공
 ==== 궁금한 내용 =====
1. 위 3-1에서 왜 a1과 a2의 링크 에러는 발생하지 않았을까?
2. 위 1과2에서 성공적으로 생성된 라이브러리 aaa과bbb가 왜 3-1에서
   갑자기 에러가 발생되었을까?
3. LD_LIBRARY_PATH란 환경변수는 링크시에 기본적으로 라이브러리를
   참조하는 디렉토리라고 알고 있는데, 링크시에 분명 라이브러리의 패스
   를 지정해 줬음에도 불구하고 이런 에러가 발생하는 이유가 무엇일까?
======================
이상입니다. 말이 넘 길었군요...고수님의 가르침을 기다리겠습니다.
그럼 꾸벅.
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved