빌드 /컴파일 소개

Поделиться
HTML-код
  • Опубликовано: 10 янв 2025
  • 챕터 list : • 모던 C++ Build

Комментарии • 24

  • @_6_70
    @_6_70 2 года назад +1

    감사합니다.
    Linux OS를 공부하면서 make파일을 만들어보고 빌드하는 과정을 직접 실습해보면서 눈으로 확인해봤었을 때
    원론적으로 배웠던 빌드의 과정 (전처리 -> 컴파일 -> 어셈블리 -> 링커) 중에서 어셈블리 과정이 왜 생략되는지 의문을 가지고 있었습니다.
    다른 분의 질문에 개발자님의 답변을 통해서 실제로는 과거와 다르게 컴파일의 역할이 확장되면서 어셈블리 과정이 생략됐음을 이제서야 이해하게되었습니다.
    개발자가 되기위해 공부를 시작한지 얼마되지않았는데 유익한 정보를 얻을 수 있어서 많은 도움이 되었습니다.

    • @코드없는프로그래밍
      @코드없는프로그래밍  2 года назад +1

      감사합니다. 채널에서 더 많은 C++관련 영상 보실 수 있습니다.

    • @조바이든-r6r
      @조바이든-r6r 2 года назад

      오우 어린나이신데도 노코프를 알고계신다니 인생 2회차이신게 분명합니다

  • @최준혁-n8v
    @최준혁-n8v 4 года назад +3

    👍🏼 좋은 강의 감사합니다. 좋은 ide를 쓰면 편리하지만 어쩌면 불편하더라도 vim과 터미널을 이용하는 게 실력 향상에는 더 좋은 거 같습니다. make에 대해서도 강의해주시면 좋겠습니다.

    • @코드없는프로그래밍
      @코드없는프로그래밍  4 года назад +1

      먼저 만들고싶은게 많아 먼 훗날이 될것같지만 만들어볼께요. 감사합니다.

  • @user-G6b6
    @user-G6b6 2 года назад

    안녕하세요 제가 BLD파일 안의 내용을 변경코자 하는데 가능한가요?
    우선 구독 좋아요 누릅니다

  • @tykim11
    @tykim11 4 года назад +1

    유익한 영상 감사합니다.

  • @서울개발자95
    @서울개발자95 3 года назад +1

    Build Processor는 Pre Processor -> Compiler -> Linker 과정을 전체적으로 수행하는 과정이라고 이해를 했습니다.
    Assembler 같은경우 Pre Processor -> Compiler -> (Assembler) -> Linker 같은 순서로 작동한다고 알고있는데
    c++로 작업을 하는데 Assembler 같은 경우 Build과정에 필수로 작동하는 과정인지궁금합니다.
    아니라면 과정을 생략할지 말지 어떤 조건에서 이루어지게되는지 궁금합니다.

    • @코드없는프로그래밍
      @코드없는프로그래밍  3 года назад +1

      빌드 프로세스는 pre processor -> 컴파일러 -> 링커 과정이 맞습니다.
      이중에 컴파일러는 코드를 기계어(obj)파일로 바꿔준다 라고 이해하시면 되고, 어셈블러는 어셈블리어를 기계어로 바꿔준다고 생각하시면 됩니다.
      어셈블리어는 ISA기계어를 사람이 그나마 읽을만한 언어로 바꾼것 뿐입니다.
      컴파일과정(코드 -> 기계어) 로 컴파일 하는 과정중에 어셈블리를 만들 필요는 없습니다.
      다만 컴파일의 결과(기계어)가 최적화가 되어있는지 확인을 하는 과정에서 어셈블리어를 확인을 가끔 하기는 합니다. 또 궁금하신것 있으시면 질문주세요.

    • @서울개발자95
      @서울개발자95 3 года назад

      @@코드없는프로그래밍
      항상 C++빌드과정은 전처리기->컴파일러 ->어셈블러->링커로 알고있다가 빌드과정에 어셈블러가 없어도된다는걸 보고 헷갈려서요...
      컴파일러는 코드 ->기계어 이고
      어셈블러는 어셈블리어-> 기계어 라면 어셈블리어는 어디서 만들어내는건가요..?
      아니면 컴파일러에서 선택에 따라 코드 에서 기계어 혹은 어셈블리어로 변환 가능하고 어셈블리어로 변환했다면
      이후 어셈블러를 사용해 기계어로 변경이 가능한건가요..?

    • @코드없는프로그래밍
      @코드없는프로그래밍  3 года назад

      아주 과거에는 코드->컴파일러->어셈블리어->어셈블러->기계어->링커로 동작했었던적이 있었을 것입니다. 다만 어차피 최종목적이 기계어라면 중간 어셈블리 과정이 빠져도 되는것이죠.
      gcc와 같은 컴파일러에서 컴파일 option에 어셈블리어를 생성하는 플래그가 있습니다. 이를 이용하여 코드->어셈블리어로 변환이 가능합니다.
      만약 어셈블리어로 만들어진 코드가 있다면, 어셈블러를 이용해서 기계어로 변환이 가능합니다.

    • @서울개발자95
      @서울개발자95 3 года назад +1

      @@코드없는프로그래밍
      오늘 질문이 많았는데 하나하나 답변해주셔서 감사합니다 ㅎㅎ
      예전에 공부했던걸로만 알고 영상넘어갔다가 처음영상부터 보면서 다시 공부하는데 빌드과정에서 너무 헷갈렸는데
      덕분에 제대로 이해가 되네요ㅠㅠ..
      강의 영상중 최곱니다 정말

  • @bromp8052
    @bromp8052 9 месяцев назад

    노코프님 영상 잘 보고 있습니다!
    -o 옵션을 통해 실행파일을 생성하면 .dSYM 파일이 생성되고 -o 옵션을 주지 않으면 .out 파일이 생겨 서로 확장자가 다른데 어떤 차이인지 궁금합니다.

    • @코드없는프로그래밍
      @코드없는프로그래밍  9 месяцев назад

      안녕하세요. 어떤 os, 그리고 어떤 컴파일러 쓰시나요?

    • @bromp8052
      @bromp8052 9 месяцев назад

      @@코드없는프로그래밍 macOS를 사용하고 gcc 컴파일러를 사용했습니다!

    • @코드없는프로그래밍
      @코드없는프로그래밍  9 месяцев назад

      -o 옵션은 컴파일러에게 출력 파일의 이름을 지정하라고 지시합니다. 이 옵션을 사용하지 않으면, 대부분의 컴파일러는 기본적으로 a.out (유닉스 계열 시스템) 또는 a.exe (윈도우 시스템) 같은 기본 이름을 출력 파일에 사용합니다. -o 옵션을 사용하여 출력 파일의 이름을 명시적으로 지정할 수 있으며, 이는 빌드 프로세스를 더 구체적으로 제어하고, 결과 파일을 보다 쉽게 식별할 수 있게 해줍니다.
      .dSYM 파일
      .dSYM 파일은 "Debug SYMbol" 파일의 약자로, macOS에서 프로그램의 디버깅 정보를 포함하는 디렉토리입니다. 이 파일은 프로그램이 컴파일될 때 생성됩니다.
      맥에서 컴파일할때는 디버깅 정보가 같이 만들어지는것으로 보입니다

  • @_5_512
    @_5_512 3 года назад +1

    Well werror 옵션이 왜 있는지 궁금했는데 속이 시원하네요

  • @신인재-d7n
    @신인재-d7n 4 года назад +1

    영상 잘보고있습니다!!
    변수들에 주소는 언제 할당이되는지 알 수 있을까요??
    어셈블 코드를 보면 전역변수나 지역변수 extern 변수들의 주소값이 이미 다 셋팅이 되어있던데 이 3가지 변수들의 변수는 어느시점에서 셋팅이 되나요??
    프로그램 로더가 셋팅해주는건지 ...
    링킹작업을 할때 연결만시켜주는건지 잘 모르겠네요 ㅠㅜ

    • @코드없는프로그래밍
      @코드없는프로그래밍  4 года назад +1

      주소가 할당된다는 개념이 모호하네요. Data섹션엔 전역변수가 들어가고 로컬변수엔 주소가 스택에 올라갈때 할당됩니다.

    • @younghyunshim8525
      @younghyunshim8525 3 года назад

      저는 이렇게 이해하고 있습니다
      지역변수를 예로 들자면 런타임에 스택에 올라가게 됩니다.
      빌드타임에는 단순히 시작주소와 offset만 코드영역에 작성되있는 상태이고
      여기서 시작주소는 직접 메모리 어디에 할당되게 지정해주는것이 아닌 BP로부터 얼마 떨어진 메모리번지 이렇게 작성되어 집니다.
      Int a = 1 -> mov dword ptr BP - 8, 1
      이런식
      BP = 0x100 이면 0x092 번지부터 dword 만큼 메모리에 1을 넣어라 이런식이죠
      BP는 스택콜마다 바뀌겠죠

  • @유영재-c9c
    @유영재-c9c 2 года назад

    안녕하세요. 궁금한게 gcc 빌드할 때 라이브러리 링크로 L로 디렉토리를 지정하는거랑 -l로 직접 라이브러리 파일 지정하는게 무슨 차이가 있는 것인가요? L로 먼저 했는데 L 디렉토리 안에 있는 라이브러리를 못찾고 직접 l로 링크하니 빌드가 되어서요

    • @코드없는프로그래밍
      @코드없는프로그래밍  2 года назад

      l은 library link 옵션이고 L은 library directory 를 추가하기위한 옵션입니다.
      자세한 내용은 ruclips.net/p/PLDV-cCQnUlIY4TMoRsrW0oqjCLTSm1nAf 중 8번째 영상에서 확인가능합니다. 감사합니다.

  • @나두진-j7u
    @나두진-j7u 3 года назад +1

    마지막에 프로파일을 찍는다는게 무슨의미인가요?

    • @코드없는프로그래밍
      @코드없는프로그래밍  3 года назад

      프로그램 속도를 측정한다라는 말입니다. C++의 여러 프로파일러 tool이 있고, 아주 초보적인 수준으로는 직접 chrno 를 통해서 직접적으로 computation 속도 측정도 가능합니다.