본문

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




(315557)
작성일 프로필 열기/닫기
추천 | 조회 1093 | 댓글수 12
글쓰기
|

댓글 | 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
 댓글





읽을거리
[PS5] 국산 게임의 별로서 기억될 칼, 스텔라 블레이드 (129)
[MULTI] 탐험으로 가득한 사막과 맛있는 메카 전투, 샌드랜드 (33)
[MULTI] 아쉬움 남긴 과거에 보내는 마침표, 백영웅전 리뷰 (47)
[MULTI] 고전 명작 호러의 아쉬운 귀환, 얼론 인 더 다크 리메이크 (24)
[게임툰] 자신만의 용을 찾는 여행, 드래곤즈 도그마 2 (50)
[게임툰] 공주의 변신은 무죄, 프린세스 피치 Showtime! (34)
[NS] 창세기전: 회색의 잔영, 기념사업의 끝 (157)
[MULTI] 개발 편의적 발상이 모든 것을 쥐고 비틀고 흔든다, 별이되어라2 (88)
[NS] 여아들을 위한 감성 영웅담, 프린세스 피치 Showtime! (49)
[게임툰] 해방군은 왜 여자 뿐이냐? 유니콘 오버로드 (126)
[MULTI] 진정한 코옵으로 돌아온 형제, 브라더스: 두 아들의 이야기 RE (12)
[MULTI] 모험의 과정이 각별한 경험으로 맺어질 때, 드래곤즈 도그마 2 (52)



글쓰기
공지
스킨
ID 구분 제목 글쓴이 추천 조회 날짜
118 전체공지 업데이트 내역 / 버튜버 방송 일정 8[RULIWEB] 2023.08.08
143 공지 게시판 이용자 프로그래밍 언어 설문 조사! (2차 설문 20/04/30~... (3) _ 식봉이는 식봉해 3 1520 2021.03.24
3 공지 [공지]프로그래밍 & 코딩 게시판 입니다. _ 식봉이는 식봉해 4 1962 2021.03.10
4799 질문 세가좋어 321 2024.04.12
4666 질문 공돌이인생 113 2024.03.29
3165 잡담 루리웹-1970043849 216 2023.12.18
710 질문 질풍비장의패 1 600 2022.11.30
707 질문 루리웹-3648796984 802 2022.11.23
691 잡담 루리웹-8641268934 2 721 2022.08.07
685 잡담 루리웹-4247021526 2 765 2022.07.25
647 잡담 루리웹-4746138650 696 2022.06.01
637 질문 키라 요시카게 1 761 2022.05.24
631 질문 우너무너 681 2022.05.14
597 질문 키라 요시카게 668 2022.04.03
527 질문 와이플 667 2022.01.14
526 질문 와이플 687 2022.01.13
525 질문 와이플 1 851 2022.01.13
522 잡담 인민배우 심영 895 2022.01.09
521 질문 인민배우 심영 746 2022.01.08
518 질문 오잇스 650 2022.01.05
514 질문 인민배우 심영 550 2022.01.02
513 질문 인민배우 심영 680 2021.12.31
512 질문 인민배우 심영 1050 2021.12.30
511 잡담 인민배우 심영 1 663 2021.12.27
509 잡담 salvare545 616 2021.12.27
508 강좌 _ 식봉이는 식봉해 4 1193 2021.12.27
507 질문 인민배우 심영 721 2021.12.25
500 잡담 인민배우 심영 1 827 2021.12.24
497 잡담 인민배우 심영 931 2021.12.16
495 질문 V1046R-MAHORO 1 526 2021.12.14
491 질문 인민배우 심영 719 2021.12.10
글쓰기 69개의 글이 있습니다.
1 2 3
게시판 매니저
X