[완료] 데비안에 library를 수동 설치를 했습니다.
글쓴이: parrier / 작성시간: 수, 2008/08/06 - 9:42오전
데비안 pkg 를 구해서 까는 방법이 가장 편한 방법이었을텐데도 불구하고,
인터넷 연결이 막혀 있어서, 씨디로 구하고 직접 tar.gz을 구해서 깔고 하다보니(여차저차)
libdwarf 라는 패키지를 tar.gz로 다운로드 받아서 설치했습니다.
/usr/local/lib라는 디렉토리에 설치했는데요.
이 디렉토리에는
libelf.a도 같이 존재합니다.(다른 패키지)
헌데 libdwarf.a는 프로그램에서 인식을 하지 못하네요. libelf.a는 인식하는데 말이지요.
예를 들면 프로그램 코드에
[code]
#include
이렇게 세개를 추가했을 경우, 3번째 라인은 아무 에러 없이 넘어가는데 1,2줄 같은 경우는 에러를
발생시킵니다. 그런 파일이나 디렉토리를 찾을 수 없다구요.
#include"libdwarf/libdwarf.h"로 바꿔서 해보긴 했습니다만, 디렉토리에 파일이 있다고 해도
연관성이 없어서 그런지 에러를 발생시키네요. 데비안 리눅스에서 따로 라이브러리를 등록하거나 관리하는 것이 있나요?
(헉, 내용이 깨졌네요. 태그라 그런 듯. 다시 추가합니다.)
Forums:
따로 관리하는 것은
따로 관리하는 것은 없습니다. /usr/local 아래에 설치하셨다면 다 잘 찾아져야 맞습니다.
경로
헤더화일들이 있는 경로를 컴파일하면서 지정해 주세요.
gcc 라면, 아마 -I 옵션일 겁니다.
흠...
추가 해서 했더니 헤더 파일은 찾는 것 같은데요.
라이브러리적인 차원에서 접근은 못하는 것 같습니다.
undefined reference to 'elf_getscn'이라는 오류가 뜨네요.
#include "libdwarf/libdwarf.h"로 지정했을 때와 같은 오류인데요.
이것 참 ..... 난해하네요 T.T
-_-v
-I 를 정확히 지정했더니 되네요.
해당 디렉토리의 다른 유틸의 Makefile을 봤더니, 경로 지정이 되어 있더군요.
자세히 비교해보면서 하나하나 확인했더니 지적하신대로 -I를 통해 정확히 지정해주어야 하는 것이더라구요.
미숙한 점 지적해 주셔서 정말 감사합니다^^
-_-v
말씀하신 오류는
말씀하신 오류는 컴파일러 오류가 아닌 linker 오류이고요,
이는 -l(소문자 l) 옵션으로 링크하고자 하는 라이브러리를 정확히 명시해 주시고,
-L (대문자 L) 옵션으로 linker 가 라이브러리를 검색할 디렉토리을 명시해 주시면 해결됩니다.
gcc 매뉴얼에 해당 옵션들의 의미가 자세히 나와 있으니 참조해 보시면 도움이 될 것입니다.
그 외에, runtime 에 저 비슷한 오류가 나는 경우가 있는데,
LD_LIBRARY_PATH 로 googling 을 좀 해 보시면 많은 정보를 얻으실 수 있을 것입니다.
이와 관련된 주제에 대해 자세히 다룬 linkers and loaders (어쩌고 Levine 이던가 하는 사람이 저자입니다) 라는 책도 있으니 한번 읽어 보시면 도움이 많이 될 겁니다.
LD_LIBRARY_PATH가 단순한 Path가 아닌가보네요
저는 그냥 특정 라이브러리만 이용하는 것인 줄 알았는데 그것이 아닌가 보네요.
상세한 설명 정말 감사합니다 ^!!^
-_-v
댓글 달기