컴파일과 링커에 대한 질문입니다.

sjang의 이미지

질문의 내용은 링크시의 오브젝트의 위치에 관해서 입니다.

예를 들어 1.c 부터 100.c 까지 100개의 .c 를 컴파일 해서

100개 .o 로 만들고 100개의 .o 를 링크해서 하나의 .elf 를 만들때

1.o 2.o 3.o 4.o 5.o ~~ 10.o 의 오브젝트들은 바이너리의

특정한 위치에 위치하도록 Scatter File을 조정해 주었습니다.

다음번 컴파일시에 99.o 를 약간 수정하여 컴파일 하면

99.c 만 컴파일 하고 링크를 하게 되었을 경우..

정확한 위치를 지정해 주었던 1.o ~ 10.o 의 오브젝트들의

일부가 위치가 바뀌게 됩니다. 몇바이트 정도 약간씩 바뀝니다.

이런 경우는 Linker 때문에 일어나는 어쩔수 없는 현상일까요?

아니면 Scatter File의 위치 지정에서 빠진 부분이 있기 때문일까요??

codebank의 이미지

이 질문에 답변을 달정도의 실력은 되지 않지만 의문점이 생기는군요.
Scatter file이란 용어를 사용하는것을 보면 컴파일러쪽을 공부하시는건가요?
질문 내용중 1.o ~ 10.o의 위치에 관련된 내용이 있던데 직접 작성하신 링커를
이용하신다는 소리이신지... 아니면 gcc에서 작성한 어떤 파일을 이야기 하시는
것인지를 모르겠군요.
몇바이트가 바뀐다고 하셨는데 직접적인 예제를 보여주시면 안될까요?
제가 아는 한도내에서는 그럴만한 파일이 존재하는것을 보지 못한것 같은데...

좀더 상세한 질문(어떠한 파일이 어떤부분에서 어떻게 변했는지를 정확하게 명시한)
을 올리신다면 많은 분들이 도움을 주실 수도 있을겁니다.

P.S. : 혹시 Scatter파일이란게 무엇은지도 적어주신다면 저도 Test를 해보고
무엇때문인지 알아봐 드리겠습니다.

------------------------------
좋은 하루 되세요.

snowavalanch의 이미지

:roll:
혹시 폰 개발자 아닌가요?

내용을 읽어 보고 생각을 해보니,
좀 이상하긴 하네요...

99.o가 1.0.o ~ 10.o 와 링크될 때,
영향을 미치는 것이 아닌가 싶기도 하고...

진짜 정답은 뭘까 궁금하군요...

withlhw의 이미지

scatter loading의 경우 주로 임베디드 시스템에서 많이 사용이 됩니다.

프로그램의 영역중 RO(Read Only) 부분과 ZI(Zero Init....)등 나눌 수 있는

부분을 나누어서 링킹시 메모리의 어느부분에 위치를 할것인지 사용자가

지정해 줄 수가 있습니다. 예를 들어서 RO 코드들의 경우 FLASH Memory

에 올려놓고 사용해도 별 문제가 될것이 없으니깐요..

질문의 요점을 보면은 1-9까지의 object 파일들은 특정 위치에 로딩 되도록

설정을 하시고 99.o은 아무런 설정을 하지 않은것으로 보입니다만..

1-9까지의 object들의 용량이 변한거 보면은 1-9까지의 object 파일의

크기가 변해서 뒤로 밀린것 같군요... 정확하게 알려면은 *.map 파일을

좀 올려 주세요...

wantfire의 이미지

폰 개발자 맞습니다.

withlhw 님께서 말씀하신 사항이 대부분 맞는데.. 1~10.c 는 컴파일되지도

않았으며 따라서 크기 변경내역은 없습니다.

codebank님께서 말씀하신 내용중에서는.. 직접 작성하는 링커를 이용하는

것은 아니면.. 대부분의 폰 개발자들이 사용하는 것처럼. ARM complier에

Arm linker를 사용합니다. 또한 Scatter file에 대해서는 withlhw님의

설명이 맞습니다. Test 환경을 드리면 좋겠지만 넘 방대한 양이기 때문에..

댓글 달기

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