library 생성 시 헤더만 필요하고 실행파일 만들때는 library도 필요한데 왜 그런거죠?
희선
질문 제목 : 질문 내용 :
예를들면 myprogram이라는 프로그램을 만들고 있는데요.
여기에는 제가 따로 libtool.a(mytool.h) 와 liboption.a(myoption.h)를 사용하는데요.
(liboption.a는 libtool.a를 사용하는 관계입니다.)
관계도 : myprogram --use-- liboption.a --use-- libtool.a
여기서 의문이 liboption.a를 생성할때는 libtool.a를 링킹하지 않고, mytool.h만 include해도
liboption.a 를 생성하기 위해 컴파일을 하면 에러가 없이 잘 생성됩니다.
하지만 myprogram 실행파일을 만들때는 myoption.h를 include하고 liboption.a 와 libtool.a를 링킹하지 않으면
컴파일시 library들의 api들이 undefine 되었다면서 에러가 발생합니다.
이런 관계에 대해서
라이브러리를 생성할 때는 header파일만 필요하지만,
실행파일을 생성할 때는 header와 library 모두 필요하다는 사실을
명확히 무엇때문에 그런건지 원리를 이해하고 싶네요...
혹시 이에 대해서 제가 공부해야할 부분이나 설명을 해주실 수 있을까요 ㅠㅠ?
p.s) 정확히 제가 뭘 모르고 있는지 모른다는게 가장 큰문제인 것 같네요.
c언어 q&a 게시판에 적합하지 않는 문의라면 다른 곳으로 옮기도록 하겠습니다 ^^;;
-
진나
수다님, 수다님
친절한 답변 감사드립니다 ^^
알려주신 방향을 참고로해서 스스로 좀 더 공부해보겠습니다~
남은 연휴 잘 보내세요~ -
곰돌곰돌
어셈블러-로더-링커-컴파일러-os 하고 쭉 만들어 보시면 해당 내용에 대해 누구에게든 설명해 주실수 있을겁니다.
물어보신 내용은 로더, 링커에 대한 내용이고 왜 그렇게 만들어져야 하는지는 링커와 로더의 작동에 대해 이해를 하셔야 합니다.
그리고 저걸 이해하게 되면 static/dynamic(shared) library에 대해서도 이해하시게 될겁니다.
방향은 일러 드렷으니 원하는 내용은 직접 찾아보시고 만들어보시면 될겁니다.
이게 누군가에게 원리를 설명 -
파라미
저도 웹사이트 + 경험으로 얻을 것들이라...
구글에서 Shared Library로 검색하시면 많은 참고자료를 얻으실 수 있을거예요.
(쓸만한 자료들은 영어로 되어 있는 경우가 많더군요. ^^;;;) -
푸른나무
수다님
친절한 답변 너무 감사드립니다 ^^
혹시 \유닉스 환경에서는 해당 함수가 필요한지, 실행 파일을 만들때 비로서 체크를 합니다.\
이런 것에 대한 설명이나 원리를 알려면 어떤 책의 어느 부분을 공부해야하는지
알 수 있을까요 ^^?
이번 답변을 듣고 그런가보다 넘어가다가... 나중에 누가 물어보면
\그냥 그렇게 들었는데...\라고 하기보다는 원리를 알고 대답해줄 수 있는 사람이 되고 싶어서요 ^^ㅋ -
SweetChoco
1. 유닉스 환경에서는 해당 함수가 필요한지, 실행 파일을 만들때 비로서 체크를 합니다. 그렇기 때문에 libTool.a를 검사하지 않죠. 윈도우 환경에서는 그렇게 만들면 빌드시 에러가 납니다.
그렇다 하더라도 liboption.so를 만드실때, libtool.a를 링크해서 빌드하셔야 합니다.
그래야 실제로 사용시에는 liboption.so만 있어서 실행이 가능하죠.
2. 1번에서 답변이 된 것 같네요. 그렇기 때문에 라이브러리를 제대로 만들었는지 확 -
힘찬
수다님,
답변 감사합니다.
네 맞습니다. 이미 liboption.a를 만들때 libtool.a를 포함하도록 만들고
myprogram 실행파일 생성 시에 liboption.a만 링킹하면 될 것 같습니다.
(말씀하신대로 이 경우는 myprogram 생성시 libtool.a는 링킹할 필요가 없을 것 같네요ㅎ)
그런데 제가 근본적으로 궁금했던건... 왜
1) liboption.so를 만들때는 libtool.a를 링킹하지 않고, mytool.h만 필요한 -
달달항사탕
말씀하시는 것은 컴파일의 문제가 아니라 링킹(Linking)의 문제를 말씀하시는 것 같은데요.
사실 윈도우 같은 경우는 말씀하신 것 처럼 빌드가 되지도 않고...
liboption.a를 사용한다면, libtool.a가 없어도 실행이 되도록 만들어야겠지요.
(liboption.a가 libtool.a를 포함하도록...) -
파랑새
수다님,
죄송합니다.
gcc compiler 입니다~ ^^ -
아잉
라이브러리에 관한 질문을 할때는 최소한 컴파일러가 뭔지를 알려줘야 하지 않을까요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |
2691618 | 링크드리스트 개념 질문이예요 (3) | 맨마루 | 2025-04-15 |
2691592 | 동적할당 이용 배열선언 질문입니다.ㅠㅠ (3) | 허리달 | 2025-04-15 |