실행?? 심볼릭 링크?

익명 사용자의 이미지

너무 쉬운 질문이라 답답하실겁니다.
그런데 정말 몰라서요..

제가 지금 라이브러리를 보고 있는데...
프로그램 실행중에 라이브러리를 사용할 수 있는게 동적
프로그램 실행전 실행파일에 설치하는게 정적
프로그램이 실행될 때 프로그램에서 적재되는게 공유라이브러리하고 하던데요..

프로그램 실행전, 실행될 때, 그리고 실행중에..
이 기준이 뭐죠? 프로그램이 메모리에 올라올때라고 이해하면 되는겁니까? 그렇다면 프로그램이 메모리에 올라온다는 것은 또 뭡니까? 개념적으로는 이해가 갈듯 한데.. 직접 설명을 하려니 안 되는군요..

그리고 심볼릭 링크는 모죠? 공유라이브러리를 설치할때 ldconfig는 realname의 심볼릭 링크로 soname을 생성한다고 하는데.. 심볼릭 링크라는게 realname도 심볼의 하나라고 인식하고 그것에 맞는 soname을 생성한다. 그렇게 이해하면 되는겁니까?
또, soname은 사용자(프로그래머)가 만드는것이아니라 ldconfig가 생성하는 겁니까? 제가 본 파일의 위에서는 프로그래머가 만드는 것처럼 말하던데.. 제가 잘못안것일까요??
부탁드립니다..

정말 초 허접 질문이지만.. ㅠ.ㅠ 씨 책을 봐도 실행에 관한 것은 없더군요.. ㅠ.ㅠ

익명 사용자의 이미지

; 프로그램 실행전, 실행될 때, 그리고 실행중에..
이것의 기준은 라이브리를 link하는 실행프로그램의
관점에서 본 것입니다.
즉 실행 프로그램이 컴파일될때 link를 하면 정적이 되는겁니다.

그리고 (실행될 때, 실행중)의 관계는 상당히 애매하다고 할수 있죠.
왜냐하면 둘다 동적 link이니까요. 단지 실행 프로그램에서
의도적으로 link(dlopen API call)하느냐 아니면 load가
자동적으로 link(/lib, /usr/lib, /etc/ld.so.conf)되느냐의
차이 정도라고 할까나...

; 심볼릭 링크는 모죠.
이것은 so file에서 link하는 프로그램이 참조할 수 있는 name table을
의미하는 것으로써 만약 so file에서 이 이름을 참조 할 수 없다면,
프로그램시 load되는 메모리의 위치에서 직접 계산을 해서 사용 해야
하지요. 그렇게 프로그램을 하는 것은 너무 어렵겠죠
때문에 이것을 자동으로 계산해서 관리하는 table을 만드는데 이것을
사용하게 됩니다.(dlsym API)

참고)

tt.so --->
int Count = 0;

int CountAdd()
{
Count++;
}

사용예 -->
char *pp, tmp[1024];
int *ic;
int (*ifunc)();
void *dh;

if((dh = dlopen("tt.so", RTLD_LAZY)) == NULL) {
pp = dlerror();
strcpy(tmp, pp?pp"NULL");
printf("Load 중 오류가 발생했습니다. Error -> %s\n", tmp);
exit(1);
}

ic = (int *)dlsym(dh, "Count");
printf("Test Count [%d]\n", *ic);
/* ----------> 출력결과 "Test Count [0]" --------*/

ifunc = (int (*)())dlsym(dhandle, "CountAdd");
ifunc();
printf("Test Count [%d]\n", *ic);
/* ----------> 출력결과 "Test Count [1]" --------*/

도움이 되기를 ...

익명 사용자의 이미지


감사합니다.
심볼릭 링크와 실행에 관련된 것은 어느정도의
개념은 알고 있었는데..
영.. 설명을 하려니 안 되서.. -.-;;
님 덕분에 조금 더 자세히(?) 알고 갑니다...
꾸벅~~ 꾸벅~~

댓글 달기

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