실행파일에 정적/동적은 없어. 니가 크게 잘못이해하는거야. 정적/동적 링크는 특정 라이브러리에 대해서 어떻게 링크할건지에 대한 특성이야
레노미나(ilbo0401)2012-05-25 20:22
liba.so 를 dynamic link 하고 libb.a를 static link 하면 나오는 executable file은 dynamically linked 지.
fm100(220.117)2012-05-25 20:22
executable file이 statically linked란 소리는 실행하기 위해 외부 라이브러리 파일이 필요 없다는 뜻임.
fm100(220.117)2012-05-25 20:22
-static 주고하면 정적링크한 라이브러리 목록을 보여줄거고, 정적/동적 모두 보여줄수도 있고, 동적만 보여줄수도 있어.
레노미나(ilbo0401)2012-05-25 20:23
레노미나// 실행파일이 어떤식으로 만들어 졌는지에 대해서도 비슷하게 얘기해
fm100(220.117)2012-05-25 20:23
$ ldd ./a.out not a dynamic executable
fm100(220.117)2012-05-25 20:24
에...
레노미나(ilbo0401)2012-05-25 20:24
내 쉘에서 ldd 해본 결과 찍어본거여. a.out 뒤에 줄바꿈이 있어야되는데 안바꼈네.
fm100(220.117)2012-05-25 20:24
ldd 가 dynamic executable 이 아니라고 커맨드 뱉어주잖슴?
fm100(220.117)2012-05-25 20:25
저게 -static 옵션주고 헬로월드 만든 a.out 실행파일.
fm100(220.117)2012-05-25 20:25
그니까 니말은 동적링크라이브러리를 호출하지 않으면 그 실행파일은 정적 실행파일이라고 하고, 그렇지 않으면 동적 실행파일이라고 한다고?
레노미나(ilbo0401)2012-05-25 20:25
글쎄다.. 는 니가 쓰는 용어가 위키백과나 학술지등에 언급되지 않을거 같아. 단지 일부 축약해서 정확하지 않게 말할때나 쓰이는 표현이지
레노미나(ilbo0401)2012-05-25 20:28
라이브러리를 호출한다 그러니깐 말이 이상하네. func 라는 함수를 써야되는데, 이게 외부 libfunc.a 에 있었어. 이걸 statically link 해서 func를 실행파일이 들고있고, 이 프로그램을 실행하기 위해 다른 어떤 라이브러리 파일도 시스템에 없어도 되면 그 실행파일이 statically linked executable file이고, 실행하기 위해 다른 파일(.so)를 메모리에 올려야되면 그건 dynamically linked executable file이지.
이건.. 자신들 제품에서 무언가를 설명할때 쓰는 단축형 표기고, 시스템 프로그래밍입장에서 정의한게 아니잖아.
레노미나(ilbo0401)2012-05-25 20:37
글쎄? 내가보기엔 이게 제품설명 페이지 같지는 않아서. 시스템 프로그래밍 입장에서 정의한다고 말하니까 뭘 말하는지 모르겠네.
fm100(220.117)2012-05-25 20:41
에, 이건 소모적인 얘기같다. 내가 볼때는 혼란스러운 표현이야. 실제로 구글검색해봐도 쉽게 찾기도 힘든 표현을 흔히쓰이는 표현이라고 하면 안되지
레노미나(ilbo0401)2012-05-25 20:41
난 진짜 학술적인 자료에서는 못찾겠는데, 스택오버플로우나 여기저기서 많이들 쓰는 표현이라는거지. 실제 유닉스 커맨드에서도 dynamic executable 이런 용어 써가면서 메세지 뱉어내고 있고. 학술/비학술 을 얘기하자면 난 뭐가 어디에 속하는지 잘 모르겠네. 뭐 생산적인 얘기가 아니라는 거엔 동의해.
ㅋㅋㅋ 내가 질문해놓고 첫리플만 보고서 글이 묻힌거 같아서 다신 안보고 있다가 오늘 갑자기 또 생각나서 검색해보다가 내가 쓴글을 보게 되는구나 ㅋㅋㅋㅋ 뭐 엄청난 설전이 있었지만 원래 내가 궁금했던건 실행파일 자체로만 실행할 수 있는 빌드를 원했던것이고(사용하는 라이브러리가 shared일지라도..) 결론적으로 .so 라이브러리를 사용하는 실행파일은 .so가 없으면 안된다는것임..ㅋㅋ
ㅇ(112.148)2012-05-29 03:13
난 fm100횽의 링크들 보면서 해답을 얻게됏던거고, 이미 뒤로 지나간 글에 답변을 다는 이유는 혹시나 같은 궁금증이 생긴 미래의 인터넷 궁금이를 위함.
안됨.
질문을 다시해.
static 빌드란게 뭘 말하는거야? 모든 라이브러리를 정적링크하도록 빌드하는거?
실행파일을 정적으로 만든다는게 무슨말이야? 실행파일에 동적/정적이 있어?
레노미나// 실행파일도 static, dynamic 있음.
hello world 만들고, 컴파일할때 그냥 gcc hello.c 하고서 쉘에서 ldd ./a.out 해보면 링크하는 so 파일들 목록이 나오지.
컴파일할때 gcc 옵션으로 -static 주고 컴파일하면 static link해서 static executable 로 만들어줌.
질문은 so 파일을 static link할 수 없냐는건데, 그건 불가능. 보통 so하고 a를 동시에 제공해서 원하는데로 쓸 수 있게하지.
fm100 // 잘못알고 있는거 아니야? 정적/동적 실행파일이란게 무슨 개념인데?
레노미나// 실행파일이 라이브러리에 있는 코드 통째로 다 묶어서 들고가는게 static, 런타임에 링크하는게 dynamic.
hello world 만들고, file 커맨드로 file a.out 뭐 이런식으로 해봐.
fm100// 그럼 일부는 정적으로 링크고, 일부는 동적으로 링크하면?
-static 안주고 하면 어쩌고 저쩌고 dynamically linked 나올거고 -static 옵션주면 statically linked 나옴.
실행파일에 정적/동적은 없어. 니가 크게 잘못이해하는거야. 정적/동적 링크는 특정 라이브러리에 대해서 어떻게 링크할건지에 대한 특성이야
liba.so 를 dynamic link 하고 libb.a를 static link 하면 나오는 executable file은 dynamically linked 지.
executable file이 statically linked란 소리는 실행하기 위해 외부 라이브러리 파일이 필요 없다는 뜻임.
-static 주고하면 정적링크한 라이브러리 목록을 보여줄거고, 정적/동적 모두 보여줄수도 있고, 동적만 보여줄수도 있어.
레노미나// 실행파일이 어떤식으로 만들어 졌는지에 대해서도 비슷하게 얘기해
$ ldd ./a.out not a dynamic executable
에...
내 쉘에서 ldd 해본 결과 찍어본거여. a.out 뒤에 줄바꿈이 있어야되는데 안바꼈네.
ldd 가 dynamic executable 이 아니라고 커맨드 뱉어주잖슴?
저게 -static 옵션주고 헬로월드 만든 a.out 실행파일.
그니까 니말은 동적링크라이브러리를 호출하지 않으면 그 실행파일은 정적 실행파일이라고 하고, 그렇지 않으면 동적 실행파일이라고 한다고?
글쎄다.. 는 니가 쓰는 용어가 위키백과나 학술지등에 언급되지 않을거 같아. 단지 일부 축약해서 정확하지 않게 말할때나 쓰이는 표현이지
라이브러리를 호출한다 그러니깐 말이 이상하네. func 라는 함수를 써야되는데, 이게 외부 libfunc.a 에 있었어. 이걸 statically link 해서 func를 실행파일이 들고있고, 이 프로그램을 실행하기 위해 다른 어떤 라이브러리 파일도 시스템에 없어도 되면 그 실행파일이 statically linked executable file이고, 실행하기 위해 다른 파일(.so)를 메모리에 올려야되면 그건 dynamically linked executable file이지.
검색해봐도 그런용어는 없어. statically linked executable, dynamically linked executable 찾아봐.
그러니까, 내말은 fm100말하는 개념은 단순히 짧고 편리하게 코멘트하기 위한 ldd 출력메시지보고 말하는 너만의 개념이지. 위키백과나, 아니면 그런개념이 언급된 시스템 프로그래밍 서적도 좋고, 아니면, 하다못해 블로그강좌라도 올려주면 인정해줄께.
아무도 그런 단어는 쓰지 않아.
단어 -> 용어
static lib와 dynamic lib 동시에 링크하면 statically & dynamically linked executable인가?
아아, 좋은 떡밥이다.
학술지 얘기하니깐 솔직히 그건 모르겠네. 학술지에서는 나름 용어를 쓰는 방법이 좀 다를거같아서.
http://docs.oracle.com/cd/E19082-01/819-0690/chapter1-1/index.html
여튼 이건 그냥 검색해서 나온 오라클 docs 페이지인데 오라클 docs에서 지멋대로 용어를 쓸거같진 않은데?
나도 너무 오랫동안 자연스럽게 static/dynamic executable 써와가지고, 제대로 된 용어가 아니라 야매라고 그러면 솔직히 내가 맞다고 우길 자신은 없는데 오라클 docs에도 있는거 보면 내가 틀린건 아닌거같음.
여튼 원래 질문한 형의 질문 내용에 대해서 내가 이해한건,
http://stackoverflow.com/questions/725472/static-link-of-shared-library-function-in-gcc
이거랑 똑같은 질문이라는거.
이건.. 자신들 제품에서 무언가를 설명할때 쓰는 단축형 표기고, 시스템 프로그래밍입장에서 정의한게 아니잖아.
글쎄? 내가보기엔 이게 제품설명 페이지 같지는 않아서. 시스템 프로그래밍 입장에서 정의한다고 말하니까 뭘 말하는지 모르겠네.
에, 이건 소모적인 얘기같다. 내가 볼때는 혼란스러운 표현이야. 실제로 구글검색해봐도 쉽게 찾기도 힘든 표현을 흔히쓰이는 표현이라고 하면 안되지
난 진짜 학술적인 자료에서는 못찾겠는데, 스택오버플로우나 여기저기서 많이들 쓰는 표현이라는거지. 실제 유닉스 커맨드에서도 dynamic executable 이런 용어 써가면서 메세지 뱉어내고 있고. 학술/비학술 을 얘기하자면 난 뭐가 어디에 속하는지 잘 모르겠네. 뭐 생산적인 얘기가 아니라는 거엔 동의해.
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=924295&tag=1
마지막으로 하나만. ieee 논문에서도 그런용어 쓰네;; abstact에는 없는데 내용에 보면 있어.
http://www.cs.arizona.edu/~jhh/papers/slinky.pdf
하나만 더 붙일게. statically-linked executable 검색해보면 여러개 나와.
글쎄다..문맥상 축약된 표현이잖아. 모두 정적으로 링크된 실행파일, 모두 동적으로 링크된 실행파일, 일부는 정적,일부는 동적으로 링크된 실행파일을 구분하기 위해 특정 도메인에서, 편의상 표현하는 방법이고, 이건 대부분 문맥상 이해할수 있기에 그렇게 쓰는 거잖아.
일부 특정 문맥에서 쓰는 단축용어에 대해, 좀더 정확한 개념을 요구했고, fm100은 그 단축용어가 일반적으로 쓰이는 정확한 용어다 라고 말하고, 나는 그 용어는 위키백과에도 안나오는용어고, 일반적으로 쓰이는 개념이 아니다라고 말하는거야.
http://en.wikipedia.org/wiki/Static_build
이런 거 말하는건가?
statically linked executable, statically linked program 구글에서 많이 나오는데?
헐..static build 는 그렇게 정의되어 있네. 이부분은 내가 잘못알고 있던 거네. 쏘리하다. 근데, 용어가 좀 야매틱하네. In a statically built program, no dynamic linking occurs 의 축약 표현이다.
실행파일을 정적으로 못만드나요?? => \"실행파일에도 정적/동적이 있어?\" => \"레노미나// 실행파일도 static, dynamic 있음\" => \" statically linked executable\" 로 표현들이 와전되면서.. 아..힘들다..
내가 잘못알고 있었다. 미안하다. 괜히 아는척하려다가 창피만 당하고 간다.
ㅋㅋㅋ 내가 질문해놓고 첫리플만 보고서 글이 묻힌거 같아서 다신 안보고 있다가 오늘 갑자기 또 생각나서 검색해보다가 내가 쓴글을 보게 되는구나 ㅋㅋㅋㅋ 뭐 엄청난 설전이 있었지만 원래 내가 궁금했던건 실행파일 자체로만 실행할 수 있는 빌드를 원했던것이고(사용하는 라이브러리가 shared일지라도..) 결론적으로 .so 라이브러리를 사용하는 실행파일은 .so가 없으면 안된다는것임..ㅋㅋ
난 fm100횽의 링크들 보면서 해답을 얻게됏던거고, 이미 뒤로 지나간 글에 답변을 다는 이유는 혹시나 같은 궁금증이 생긴 미래의 인터넷 궁금이를 위함.