본문

글쓰기   목록 | 이전글 | 다음글

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


profile_image


(315557)
0 | 12 | 1358 | 비추력 43357
프로필 열기/닫기
글쓰기
|
목록 | 이전글 | 다음글

댓글 | 12
1
 댓글


(IP보기클릭)14.39.***.***

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

(IP보기클릭)59.16.***.***

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

(IP보기클릭)14.39.***.***

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

(IP보기클릭)24.114.***.***

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

(IP보기클릭)24.114.***.***

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

(IP보기클릭)59.16.***.***

분쇄쿠키
감사합니다. 해보겠습니다. | 21.12.05 19:47 | |

(IP보기클릭)220.117.***.***

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

(IP보기클릭)59.16.***.***

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

(IP보기클릭)220.117.***.***

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

(IP보기클릭)59.16.***.***

plok
감사합니다. 해보겠습니다. | 21.12.05 20:06 | |

(IP보기클릭)175.207.***.***

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

(IP보기클릭)117.52.***.***

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


1
 댓글




목록 | 이전글 | 다음글
글쓰기
공지
스킨
ID 구분 제목 글쓴이 추천 조회 날짜
154 전체공지 서비스 점검 안내 : 로그인 복구 8[RULIWEB] 2025.07.08
3 공지 [공지]프로그래밍 & 코딩 게시판 입니다. _ 식봉이는 식봉해 4 2914 2021.03.10
495 질문 V1046R-MAHORO 1 718 2021.12.14
491 질문 인민배우 심영 874 2021.12.10
490 전공지식 오잇스 4 1024 2021.12.09
489 잡담 인민배우 심영 1197 2021.12.09
488 유머 오잇스 1 1724 2021.12.08
487 잡담 인민배우 심영 769 2021.12.07
485 전공지식 인민배우 심영 652 2021.12.06
484 질문 인민배우 심영 1358 2021.12.05
482 잡담 인민배우 심영 1 769 2021.12.04
480 잡담 인민배우 심영 746 2021.11.30
383 질문 인민배우 심영 682 2021.09.26
315 잡담 오잇스 4 760 2021.09.06
220 질문 보리슈와 1056 2021.06.12
212 잡담 루리웹-4970588990 964 2021.05.30
205 질문 울엄마아들 1 461 2021.05.22
202 공지 _ 식봉이는 식봉해 4 807 2021.05.20
195 질문 루리웹-8668068376 1533 2021.05.13
193 잡담 단짠짠단 1 605 2021.05.11
186 공지 _ 식봉이는 식봉해 6 846 2021.04.30
172 잡담 단짠짠단 7 3973 2021.04.20
114 질문 단짠짠단 668 2021.03.17
64 잡담 혼노모 6 2849 2021.03.13
62 잡담 _ 식봉이는 식봉해 1 746 2021.03.13
60 잡담 자격종목 1 672 2021.03.13
56 잡담 단짠짠단 1 626 2021.03.13
35 잡담 마프네 623 2021.03.12
33 잡담 루리웹-011100110 670 2021.03.12
32 잡담 maLignant 1 675 2021.03.12
글쓰기 67개의 글이 있습니다.
1 2 3

게시판 매니저

X