본문

[질문] C에서 라이브러리와 헤더 파일의 차이

일시 추천 조회 1136 댓글수 12 프로필펼치기


1

댓글 12

C언어 프로그램은 실제 구현체인 오브젝트와 오브젝트를 컨트롤 할수 있는 헤더로 구성됩니다 이 두개가 한쌍으로 되어있고 만약 외부 라이브러리를 붙였다면 이 오브젝트가 스태틱이든 다이나믹이든 프로그램에 붙습니다 이제 이렇게 붙어버린 라이브러리를 컨트롤 하려면 헤더를 불러와서 사용해야하죠 라이브러리를 배포하는데 코드없이 오브젝트와 헤더만 배포하는 경우가 있습니다 분명 컴파일된 오브젝트에는 더 많은 함수들이 구현되어있는데 무슨 이유든 외부공개를 하고 싶지 않은 경우가 있습니다 이럴때 배포된 헤더에서 감추고 싶은 함수를 지우고 배포하면 리버스 엔지니어링으로 역분석을 하지 않는이상 아무도 모르게 되죠 이러한 이유로 C언어에서는 실제 구현체인 오브젝트와 헤더로 구성되어있고 무슨 이유로든 꼭 헤더를 불러와야 하는겁니다 윈도우 프로그램 역시 마찬가지입니다. 비주얼 스튜디오에서 이미 윈도우 .NET 프레임워크가 동적으로 붙어있고 이를 이용할수 있는 헤더의 경로 역시 지정되어있기 때문에 단순하게 윈도우 라이브러리 파일만 include 하면 됩니다. 다만 윈도우용 소스들은 stdio.h 자체가 유닉스 / 리눅스 / 맥과 같은 다른 플랫폼과는 다르게 선언되어있기 때문에 stdio.h 만 include 해도 프로그램이 동작하는겁니다 리눅스용 프로그램의 C언어 소스와 윈도우용 stdio.h 를 직접 까서 확인해보시면 중간에 윈도우용 프레임워크를 include 하는 부분이 추가되는 것을 볼수 있을겁니다.

MOBIUS! | (IP보기클릭)14.39.***.*** | 21.12.05 19:29
MOBIUS!

어....90%는 이해할 수 없는 말씀이지만, 그건 제가 배움이 부족하기 때문입니다. 답변 감사드립니다. 일단 꾸준히 더 해보겠습니다.

인민배우 심영 | (IP보기클릭)59.16.***.*** | 21.12.05 19:38
인민배우 심영

쉽게 풀어 설명드리면 stdio.h 는 기본적인 프로그래밍 함수들을 선언해놓은 시스템 헤더입니다 C언어는 라이브러리를 붙이면 무조건 헤더를 include 해서 써야합니다 다만 윈도우가 C언어 표준에서 조금 많이 벗어나 있어서 stdio.h 에 윈도우 제어용 .NET 프레임워크도 함께 포함해서 이 stdio.h 자체를 컴파일해서 사용하도록 되어있어요. 본래 유닉스나 리눅스같은데서는 다 일일이 주렁주렁 include 해서 써야하죠. 그래서 리눅스나 유닉스는 프로그램 설치할때 의존성을 따지고 복잡해지는겁니다. 윈도우는 이걸 아예 의존관계가 없도록 시스템에서 제공하는 기본기능을 다 붙여서 stdio.h 하나만 include하면 되도록 변경했습니다. 원래는 전부 다 주렁주렁 include 하는게 맞아요.

MOBIUS! | (IP보기클릭)14.39.***.*** | 21.12.05 19:43

전자레인지를 사용해서 비유하면 해더 파일(.h)은 명령이 지정된 버튼이고 라이브러리는 (.c 나 .o)는 지정된 명령을 수행하는 장치로 보시면 편할 겁니다. 일반적으로 한 세트로 움직이죠.

분쇄쿠키 | (IP보기클릭)24.114.***.*** | 21.12.05 19:43
분쇄쿠키

사실 위에 하신 질문은 작업을 .h와 .c로 나눠서 작업 하신뒤 gcc로 직접 컴파일을 해보시는게 가장 이해가 빠를겁니다.

분쇄쿠키 | (IP보기클릭)24.114.***.*** | 21.12.05 19:46
분쇄쿠키

감사합니다. 해보겠습니다.

인민배우 심영 | (IP보기클릭)59.16.***.*** | 21.12.05 19:47

일단 어떤 툴을 쓰시는 지 알 수 있을까요? 그걸 적어두시면 님 상황에 맞는 답변을 하기 쉬워집니다. 코드에 include를 쓰듯, 라이브러리는 링킹(Linking)이라는 과정을 거쳐야 합니다. 코드에 include를 쓰는 것은 자신의 코드에 다른 라이브러리의 어떤 코드를 쓰겠다고 선언하는 것입니다. 링킹은 자신의 코드를 컴파일하면서, 다른 라이브러리의 코드 정보를 내 코드에 집어 넣는 것입니다. 더 구체적으로 스태틱, 다이나믹으로 나뉘긴 하지만 그 부분은 일단 넘어가고... 링킹 방법은 컴파일러마다 다릅니다. 비주얼 스튜디오라면 프로젝트 설정을 수정하고, gcc 라면 makefile을 수정하고... 제각각입니다. 다만 stdio.h와 같은 C 표준 헤더는 링킹을 위해서 따로 설정을 건드릴 필요가 없습니다. C 표준 기능은 컴파일러에서 기본적으로 제공하는 기능이기 때문입니다.

plok | (IP보기클릭)220.117.***.*** | 21.12.05 19:44
plok

답변 감사합니다. 코드블럭 사용합니다. 앞으로 질문 올릴때 유의하겠습니다.

인민배우 심영 | (IP보기클릭)59.16.***.*** | 21.12.05 19:46
plok

음, 코드 블럭은 제가 잘 모르지만, "Settings" -> "Compiler and debugger..." -> "Global compiler settings" -> "Linker settings" 에서 링커 설정을 할 수 있고, 거기에 라이브러리 파일(코드 블럭이라면 .a 파일)을 추가하시면 될 듯 합니다. 정적 라이브러리 파일 빌드부터 검색 해서 따라해 보시고 링커 설정을 해보시면 직접 해보면 아마 감이 잡히실 겁니다. (동적 라이브러리는 만들기가 조금 더 어렵습니다.) 앞에 말씀 드렸듯 stdio.h는 별도로 링커 설정이 필요 없고, 자기가 필요한 기능을 외부에서 받아서 쓰시려면 헤더 파일을 include, 라이브러리 파일을 링킹 하셔야 합니다.

plok | (IP보기클릭)220.117.***.*** | 21.12.05 20:05
plok

감사합니다. 해보겠습니다.

인민배우 심영 | (IP보기클릭)59.16.***.*** | 21.12.05 20:06

거지같은 코드블럭 쓰지 마시고, clion을 쓰시길 추천합니다.

totori_ | (IP보기클릭)175.207.***.*** | 21.12.05 21:34
totori_

우선 C에 익숙해지고 나서 다양한 IDE를 접해보려 합니다. 감사합니다.

인민배우 심영 | (IP보기클릭)117.52.***.*** | 21.12.06 12:07
댓글 12
1
위로가기
오잇스 | 추천 4 | 조회 926 | 날짜 2021.12.09
인민배우 심영 | 추천 0 | 조회 1105 | 날짜 2021.12.09
오잇스 | 추천 1 | 조회 1513 | 날짜 2021.12.08
인민배우 심영 | 추천 0 | 조회 695 | 날짜 2021.12.07
인민배우 심영 | 추천 0 | 조회 572 | 날짜 2021.12.06
인민배우 심영 | 추천 0 | 조회 1136 | 날짜 2021.12.05
키라 요시카게 | 추천 0 | 조회 906 | 날짜 2021.12.05
인민배우 심영 | 추천 1 | 조회 687 | 날짜 2021.12.04
인민배우 심영 | 추천 0 | 조회 643 | 날짜 2021.11.30
인민배우 심영 | 추천 0 | 조회 588 | 날짜 2021.09.26
오잇스 | 추천 4 | 조회 665 | 날짜 2021.09.06
키라 요시카게 | 추천 1 | 조회 1098 | 날짜 2021.06.21
보리슈와 | 추천 0 | 조회 980 | 날짜 2021.06.12
루리웹-4970588990 | 추천 0 | 조회 908 | 날짜 2021.05.30
울엄마아들 | 추천 1 | 조회 377 | 날짜 2021.05.22
_ 식봉이는 식봉해 | 추천 4 | 조회 719 | 날짜 2021.05.20
루리웹-8668068376 | 추천 0 | 조회 1367 | 날짜 2021.05.13
단짠짠단 | 추천 1 | 조회 556 | 날짜 2021.05.11
_ 식봉이는 식봉해 | 추천 6 | 조회 722 | 날짜 2021.04.30
단짠짠단 | 추천 7 | 조회 2923 | 날짜 2021.04.20
_ 식봉이는 식봉해 | 추천 3 | 조회 1596 | 날짜 2021.03.24
단짠짠단 | 추천 0 | 조회 600 | 날짜 2021.03.17
혼노모 | 추천 6 | 조회 2111 | 날짜 2021.03.13
_ 식봉이는 식봉해 | 추천 1 | 조회 654 | 날짜 2021.03.13
자격종목 | 추천 1 | 조회 606 | 날짜 2021.03.13
단짠짠단 | 추천 1 | 조회 557 | 날짜 2021.03.13
마프네 | 추천 0 | 조회 550 | 날짜 2021.03.12
키라 요시카게 | 추천 0 | 조회 637 | 날짜 2021.03.12

1 2 3

글쓰기
게시판 매니저
.