라이브러리 *.a 와 *.so 의 차이점

presentme의 이미지

[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
안나옵니다.
내용을 볼수 있는 방법이 궁금합니다.

읽어주셔서 감사합니다.

익명 사용자의 이미지

share 와 static 의 차이가 아닐런지...

Necromancer의 이미지

a는 링크시에 실행파일내로 합쳐지는 라이브러리고,

so는 윈도의 dll 비스무리한겁니다. 런타임시에 로드되죠.

Written By the Black Knight of Destruction

monpetit의 이미지

a : so = lib : dll 정도면 이해가 빠르지 않을까요... :)

삼량의 이미지

.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를 만들때는 문서화가 필수 입니다.
도움이 되길 바랍니다. ^^

三量의 파란세상.
과거는 침묵하고, 현재는 화살처럼. 하지만 미래는 언제나 망설임으로 다가온다는걸 알고 있어!

댓글 달기

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