질문이 있습니다 링킹의 예시로 8:22 의 main.c 와 helper.c를 들어주셨는데, 이 부분이 앞에서 preprocessing의 include와 어떤점이 다른가요? helper.c는 결국 외부의 소스코드와 다름 없다고 생각이 드는데, 설명해주신 내용을 바탕으로 이해를 하자면 preprocessing의 include는 언어 자체에 내장 되어있는 소스 코드들을 c언어 레벨에서 포함을 시켜주는 것이고, 링킹은 외부에서 선언된 소스 코드들 끼리 저레벨의 언어 형태로 연결을 시켜주는것 같습니다. 하지만, 이때드는 또다른 궁금증은 들어주신 예시를 생각해보았을때, 링킹이라는 과정이 왜 preprocessing과정에서 이뤄지지 않는것일까요?
안녕하세요, preprocessing은 컴파일 이전 코드 바꿔치기와도 같습니다. (C언어를 아신다는 전제하에 설명을 드리자면,) 가령 소스 코드 위에 #include 가 있다면 stdio.h 라는 소스 코드 파일의 모든 내용이 #include 가 있는 자리에 그대로 바꿔치기되는 것이고 소스 코드 상에 #define PI 3.14라는 코드가 있다면 모든 PI는 컴파일 이전에 3.14로 바꿔치기됩니다. 반면 링킹은 컴파일이 끝난 서로 다른 "목적 파일"끼리 엮어준다는 점에서 preprocessing과 차이가 있습니다. 강의 내의 main.c 와 helper.c로 예를 들었는데, main.o 와 helper.o를 하나로 연결지어주는 과정이 링킹이지요. 링킹은 목적 파일끼리 연결하는 것이 목적이므로 컴파일 이후에 이루어져야 합니다. Proprocessing은 컴파일 이전 코드 바꿔치기 과정이므로 링킹은 processing 과정에 이루어질 수 없습니다.
좋은내용 감사합니다. 원리도 모르고 그냥 회사에서 시키는대로만 dll이나 so파일 만들었는데 조금은 로직을 알겠네요. 그런데 그 컴파일옵션같은거는 어디서 배우신건가요?(수업이나 책인가요?) 예전에 c코드 unix 컨버팅하는데 검색하는요령을 잘몰라서 한참을 검색했네요 혹여 영상중에 있다면 어떤부분인지 알려주시면 감사드립니다.
반갑습니다. 저자입니다. 좋은 말씀 감사합니다. 컴파일 옵션의 경우 gcc.gnu.org/onlinedocs/gcc/Option-Summary.html 위 문서를 참고해보시면 도움이 될 것입니다. 개인적으로 gcc의 경우 옵션이 매우 다양하기 때문에 처음부터 모두 숙지하기 위해 노력할 필요는 없다고 생각합니다.
00:00 인트로
00:43 C 언어 컴파일 과정
01:42 전처리 과정(preprocessing)
04:55 컴파일 과정(compiling)
06:45 어셈블 과정(assembling)
08:08 목적 파일 vs 실행 파일(p.87)
와.. 정말 완벽한 영상이네요 !
해당 영상을 건너뛰고 책을 완강하였었는데,
목적 파일에 대해서 알아보다가 이 영상을 우연찮게 접했네요
정말 좋은 영상 감사드립니다
참 귀한 내용이네요. 감사합니다.
와... 신기하고 멋지네요!
대박입니다.
인프런에서 질문올리고 찾아왓는데 참 좋은 내용의 영상이네요
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
아 강의가 며칠전에 만들어졋엇군요
좋은 영상 감사합니다
감사합니다.
질문이 있습니다
링킹의 예시로 8:22 의 main.c 와 helper.c를 들어주셨는데, 이 부분이 앞에서 preprocessing의 include와 어떤점이 다른가요?
helper.c는 결국 외부의 소스코드와 다름 없다고 생각이 드는데, 설명해주신 내용을 바탕으로 이해를 하자면
preprocessing의 include는 언어 자체에 내장 되어있는 소스 코드들을 c언어 레벨에서 포함을 시켜주는 것이고, 링킹은 외부에서 선언된 소스 코드들 끼리 저레벨의 언어 형태로 연결을 시켜주는것 같습니다. 하지만, 이때드는 또다른 궁금증은 들어주신 예시를 생각해보았을때, 링킹이라는 과정이 왜 preprocessing과정에서 이뤄지지 않는것일까요?
안녕하세요,
preprocessing은 컴파일 이전 코드 바꿔치기와도 같습니다.
(C언어를 아신다는 전제하에 설명을 드리자면,)
가령 소스 코드 위에 #include 가 있다면
stdio.h 라는 소스 코드 파일의 모든 내용이
#include 가 있는 자리에 그대로 바꿔치기되는 것이고
소스 코드 상에 #define PI 3.14라는 코드가 있다면
모든 PI는 컴파일 이전에 3.14로 바꿔치기됩니다.
반면 링킹은 컴파일이 끝난 서로 다른 "목적 파일"끼리
엮어준다는 점에서 preprocessing과 차이가 있습니다.
강의 내의 main.c 와 helper.c로 예를 들었는데,
main.o 와 helper.o를 하나로 연결지어주는 과정이 링킹이지요.
링킹은 목적 파일끼리 연결하는 것이 목적이므로 컴파일 이후에 이루어져야 합니다.
Proprocessing은 컴파일 이전 코드 바꿔치기 과정이므로
링킹은 processing 과정에 이루어질 수 없습니다.
좋은내용 감사합니다. 원리도 모르고 그냥 회사에서 시키는대로만 dll이나 so파일 만들었는데 조금은 로직을 알겠네요.
그런데 그 컴파일옵션같은거는 어디서 배우신건가요?(수업이나 책인가요?) 예전에 c코드 unix 컨버팅하는데 검색하는요령을 잘몰라서 한참을 검색했네요
혹여 영상중에 있다면 어떤부분인지 알려주시면 감사드립니다.
반갑습니다. 저자입니다. 좋은 말씀 감사합니다.
컴파일 옵션의 경우
gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
위 문서를 참고해보시면 도움이 될 것입니다.
개인적으로 gcc의 경우 옵션이 매우 다양하기 때문에 처음부터 모두 숙지하기 위해 노력할 필요는 없다고 생각합니다.
책에는 따로 써져 있지 않나요?? 찾아봤는데 없네요 ㅠㅠ
안녕하세요 :) 이 강의는 이해를 돕기 위한 참고 (추가 강의) 입니다. 책에는 없는 내용이에요.
좋은 강의 감사합니다.
에러가 떠서 찾아봤는데 7:10에 어셈블 과정이
$ gcc -c hongong.s -o hongong.o
이고, 링킹 과정이
$ gcc hongong.o -o hongong
인게 맞는거죠?