static library와 shared library의 차이

jkmcucu의 이미지

linux gcc 2.96으로 컴파일하여 실행화일을 만드는데요.
프로그램이 Two process(실행화일 두개, 각 12M, 8M크기)일때는 문제가 없던것이, One process로 통합하여 compile을 하니,
다음과 같은 link error가 프로그램 내의 거의 모든 함수명마다 발생했습니다.
수백~수천개의 error가 났지요.
relocation truncated to fit: R_MIPS_CALL16 함수명()
그런데, 우연하게도.. 생성하는 라이브러리들중 가장 크기가 큰(10M정도) 라이브러리를 shared library로 만들었더니 link error가 나지 않았습니다. 문제는 해결됐지만, 그 이유를 모르겠습니다.
static library와 shared library의 개념상 차이는 찾아보면 많은데요, 이 경우에 왜 엄청난 link error가 발생했는지,
그리고 한 library를 shared로 바꾸므로써 왜 error가 해결되었는지 궁금합니다.
gcc 2.96 compiler에 처리할수 있는 어떤 크기상의 한계가 있는것인지요..

익명 사용자의 이미지

제 생각에 static, shared 문제가 아닌 다른 요인이 있는것 같습니다.

static 라이브러리를 다시 잘~ 빌드(make파일도 자세히 보고....)해 보시지요.

jkmcucu의 이미지

답변 감사합니다.
제 생각에도 static, shared 문제는 아닌듯 한데요.
link error가 없어진건 정말 하나의 라이브러리만 shared로 바꿨을때였거든요. 그래서 제 짧은 지식으로 이걸로 추론을 해야하는데.. shared로 바꾸면서 10Mbyte의 라이브러리가 3M정도로 줄었을때 괜찮아진걸보니 gcc compile이 결과 이미지 파일을 만드는데 다룰수있는 라이브러리 크기 한계가 있는건가 입니다.
그래서 gcc compile option도 이것저것 넣어봤는데, 정확한 해결 option을 찾을수가 없어서 고수님들의 의견을 듣고 싶었습니니다.
gcc2.96의 버그일까요..? ㅡ.ㅡ

kslee80의 이미지

-fPIC 옵션은 써 보셨나요?

-fPIC 옵션은 assembly code 를 만들어낼때 영향을 주는 옵션이기 때문에,
static library 에 포함되어 있는 모든 object 들의
소스 코드를 컴파일할때 붙여야 합니다;;

cider22c의 이미지

심볼 해석이 runtime에 일어나기 때문에 쓰이지 않거나 없는 심볼이라도 직접적으로 호출만 안되면 문제가 없습니다.

static 의 경우 심볼 해석이 컴파일 시점에 일어나기 때문에 컴파일 자체가 안되는 것입니다...

shared 로 했을 경우 나중에 잠재적인 오류를 만들수가 있기 때문에 심볼 해석에 관한 내용은 언제나 신경 쓰시는게 좋습니다.

정보 공유

댓글 달기

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