라이브러리 *.a 와 *.so 의 차이점
글쓴이: presentme / 작성시간: 토, 2004/10/09 - 8:42오전
[root@lee lib]# pwd
/usr/lib
[root@lee lib]# ls -l libstdc++-3*
-rw-r--r-- 1 root root 451604 7월 31 2002 libstdc++-3-libc6.2-2-2.10.0.a
-rw-r--r-- 1 root root 441719 7월 31 2002 libstdc++-3-libc6.2-2-2.10.0.so
위와같이 stdc++ 관련 라이브러리를 살펴보았습니다.
libstdc++-3-libc6.2-2-2.10.0.a 와 libstdc++-3-libc6.2-2-2.10.0.so의 차이와 각각의 용도가 알고싶습니다.
[root@lee root]# ar -t libstdc++-3-libc6.2-2-2.10.0.a
cmathi.o
cstdlibi.o
cstringi.o
cstrio.o
...
잘 나옵니다.
[root@lee root]# ar -t libstdc++-3-libc6.2-2-2.10.0.a
안나옵니다.
내용을 볼수 있는 방법이 궁금합니다.
읽어주셔서 감사합니다.
Forums:
share 와 static 의 차이가 아닐런지...
share 와 static 의 차이가 아닐런지...
a는 링크시에 실행파일내로 합쳐지는 라이브러리고,so는 윈도의 d
a는 링크시에 실행파일내로 합쳐지는 라이브러리고,
so는 윈도의 dll 비스무리한겁니다. 런타임시에 로드되죠.
Written By the Black Knight of Destruction
a : so = lib : dll 정도면 이해가 빠르지 않을까요... :
a : so = lib : dll 정도면 이해가 빠르지 않을까요... :)
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
[url]http://wiki.kldp.org/wiki.php/Docbo
http://wiki.kldp.org/wiki.php/DocbookSgml/Program-Library-HOWTO
.a 와 .so.a 는 Archive 파일을 뜻하는 거구요.이
.a 와 .so
.a 는 Archive 파일을 뜻하는 거구요.
이것은 Compile Time에 Linking이 됩니다.
만일 .a를 님의 프로그램에 Linking 해서 실행 파일을 만들었다면
이 실행파일은 그 자체로 실행이 가능하게되죠.
집에서 .a를 Linking해서 만든 프로그램은 실행파일만 있으면
어디에서든 실행할 수 있다는 뜻입니다.
.so는 Shared Object를 말하는 거죠.
이것은 Run Time에 Linking이 됩니다.
만일 .so를 님의 프로그램에 Linking해서 실행 파일을 만들었다면
이 실행파일은 그 자체로서 실행이 안됩니다.
집에서 .so를 Linking해서 만든 프로그램은 실행파일뿐만 아니라
Run Time시에 Linking될 .so를 가지고 있어야 외부에서도 실행이 됩니다.
물론 .so를 어디에서 Linking할건지 환경도 맞춰줘야 겠죠?
그리고 님이 질문하신 두번째 ar..이 .a가 아니라 .so라면...
제가 알기로 볼 수 있는 방법이 없습니다.
그래서 .so를 만들때는 문서화가 필수 입니다.
도움이 되길 바랍니다. ^^
三量의 파란세상.
과거는 침묵하고, 현재는 화살처럼. 하지만 미래는 언제나 망설임으로 다가온다는걸 알고 있어!
댓글 달기