아카이브 병합시 특정 오브젝트만 병합할수도 있나요?

sunyzero의 이미지

얼마전 프로그래밍을 하던 도중 중간에 아카이브 병합을 하는데 아래와 같이 메시지가 나오더군요. 그런데 메시지 중에 아래처럼 나오는데 제가 만든 라이브러리 (임의로 mylib1, 2로 칭했습니다)는 그냥 병합되는데, libpthread.a 같은 경우는 뒤에 [shr_comm.o] 처럼 특정 오브젝트만 병합되는거 같더군요. 혹시 제 착각일지도 모르겟지만...

이렇게 되는 이유나 혹은 이렇게 병합될 수 있도록 오브젝트를 특별히 만드는 옵션이 있는지요? 혹시 아시는분은 댓글 달아주세요. 아 참고로 플랫폼은 AIX였습니다. (아래 gcc 위치에서도 쉽게 알수 있죠?)

(ld): i /usr/local/lib/gcc-lib/powerpc-ibm-aix4.3.2.0/2.95.3/libgcc.a
(ld): lib /usr/lib/libc.a
LIBRARY: Shared object libpthread.a[shr_comm.o]: 109 symbols imported.
LIBRARY: Shared object libpthread.a[shr_xpg5.o]: 123 symbols imported.
LIBRARY: Shared object libdl.a[shr.o]: 4 symbols imported.
LIBRARY: Shared object libmylib1.a: 70 symbols imported.
LIBRARY: Shared object libmylib2.a: 358 symbols imported.
LIBRARY: Shared object libc.a[shr.o]: 2268 symbols imported.
LIBRARY: Shared object libc.a[meth.o]: 2 symbols imported.
LIBRARY: Shared object libc.a[aio.o]: 11 symbols imported.
LIBRARY: Shared object libc.a[pse.o]: 78 symbols imported.
LIBRARY: Shared object libc.a[dl.o]: 4 symbols imported.
LIBRARY: Shared object libc.a[pty.o]: 1 symbols imported.
FILELIST: Number of previously inserted files processed: 28
서지훈의 이미지

$ man ar

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

sunyzero의 이미지

ar을 만드는 옵션은 다 봤지만, 뚜렷하게 언급된 옵션은 없었는데?

잘못봤나? 기본적으로 rv 로 병합하거나 한번에 cruv 로 한방에 만들든지 하는데... 이런경우에는 컴파일러가 링킹시에 모든 심볼을 다 import 해버리기 되는데, 위의 처럼 특정개체만 import 하는 경우를 말한 것이었습니다.

윗분이 무슨 의도로 쓰신 글인지 모르겠군요.

========================================
* The truth will set you free.

서지훈의 이미지

i option 보세요...-_-ㅋ
그리고 제대로 읽어 보신겁니까?

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

sunyzero의 이미지

전혀 기대하지 않았지만 다시 댓글이 있어서 댓글을 달아놓습니다. 나중에 저와 같은 문제로 고민하시는 분이 있다면 이 글을 읽고 조금은 도움이 되길 바랍니다.

i 옵션은 r 병합을 할때 어떤 오브젝트의 앞에 위치할것인지를 결정하는 옵션입니다. 따라서 libxxxx.a 에 a.o b.o c.o 가 있고 내가 새로 병합하는 오브젝트가 d.o 를 b.o 앞(즉 a.o 뒤)에 위치하고 싶을때

ar -ri b.o libxxxx.a d.o

식으로 명령을 내려서 병합합니다. 위의 아카이브를 링커가 호출하여 링킹작업을 하는 경우와는 아무런 상관이 없는 옵션입니다. 이런식의 옵션으로 몇개가 더 있긴 하죠.

아무래도 제가 윗 질문을 약간 애매모호하게 한 것 같군요. 결론은 찾았고, AIX에서는 몇몇 아카이브라고 표기된 것들이 실제로는 shared object 로 인식되는 것이었고, 그 안에서 심볼만 import 시켜주는 것이 발생할때 위와 같이 메시지가 나오는 것이었습니다. 이상하게도 libxxxx.a 처럼 .a 로 되어있고, file 속성도 아카이브인데 실제 링킹시에는 shared object 로 되더군요.

PS) 원 질문을 헷갈리게 해서 죄송하군요.

========================================
* The truth will set you free.

댓글 달기

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