쉬운질문... gcc 에서 static라이브러리 설정은 어떻게 하나요?
글쓴이: declspec / 작성시간: 금, 2011/04/08 - 12:52오전
안녕하세요
VC++ 6.0 에서 프로젝트 옵션에 보시면
기본적으로 컴파일러가 추가해주는 lib 파일들이 있잔아요?(정적 라이브러리)
gcc 의 경우도 libc.a 같은 정적 라이브러리들을 컴파일러가
기본적으로 링크시켜주는거로 아는데요
기본적으로 링크해주는 라이브러리들의 목록을 어떻게하면 볼수있나요?
또한 컴파일시 어떠한 정적 라이브러리를 추가적으로 링크하게 하고싶을땐
어떻게 하나요??
(VC++6.0 은 프로젝트 메뉴에서 걍 추가로 써주면 되죠)
Forums:
ar 명령어 알아보시고, .o 컴파일하듯 하면
ar 명령어 알아보시고,
.o 컴파일하듯 하면 되고...
질문 내용으로 짐작하기에... .so 와 .a 의 차이점을 파악하셔야 될 듯 하네요.
정적 라이브러리는 a.out 속안에 들어가서 a.out 파일이 엄청나게 커집니다.(대신 의존성 문제 없음)
감사합니다
감사합니다
만약 libmy.a 라는 파일이 있다면 /usr/lib 에 넣고
gcc -o output source.c -lmy
라고 하면 되는거군요?
ar 명령을 알아보니 결국 정적 라이브러리는
.o 파일들의 묶음일뿐 특별한 차이는 없는것 같네요
so 와 a 의 차이점은 간단하게는 알고있습니다
윈도우에서 dll 과 lib 파일의 차이처럼
동적라이브러리와 정적라이브러리인 것이죠?
자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.
이렇게 하세요..
default로 link 되는 라이브러리를 알고 싶으시면 gcc로 링크를 하실 때 --verbose 옵션을 주시면 됩니다. 몇몇 .o 파일이 user가 준 .o file에 덧붙고, -l 옵션이 추가됨을 볼 수 있는데 그게 링크되는 라이브러리/object module들인 것 같습니다. 그런데 질문하신 내용으로 보아, 이 목록들을 굳이 아실 필요가 있는지 잘 모르겠군요.
컴파일 시에 정적 라이브러리를 libtmp.a라는 정적 라이브러리를 추가하시고 싶다면, -ltmp -L라이브러리가_있는_경로 이렇게 해주시면 됩니다. 제 파일이 main.o foo.o bar.o라면, 그리고 library가 /home/myenemy/hidden에 들어있는 libtmp.a라면,
gcc -o program_name.x main.o foo.o bar.o -L/home/myenemy/hidden -ltmp
이런 식이 됩니다.
관습상 라이브러리는 lib으로 시작하고, .a 또는 .so 어쩌고로 끝납니다. 그 사이에 있는 토큰이 라이브러리의 이름이며 -l 옵션 뒤에 그 이름을 적어주시면 되죠. -L은 gcc가 어디서 그 이름의 라이브러리를 찾아야 하는지 지정해줍니다. 아마 gcc가 기본으로 library를 찾는 path가 열거된 설정 파일이 어딘가 있을 겁니다. gcc는 이 path들에 추가로 -L에 적힌 path를 뒤집니다.
그리고 ar은 static library를 만드는 데 사용할 수 있는 유틸리티입니다.
감사합니다
많은 도움 되었습니다
감사합니다~
댓글 달기