2sjin
2sjin
2sjin

블로그 메뉴

  • My GitHub
  • 전체 게시글
    • UNIX 이론 정리
    • Linux
      • Linux 관련 노하우
      • Linux 과제
      • OracleCloud & Ubuntu
      • Tomcat Server
      • MySQL Server
      • 구름 OS
      • 라즈베리파이4
    • 데이터베이스
      • DB 관련 노하우
      • DB 과제
      • DB 프로젝트
    • Unity
    • Computer Science
      • 통신 & 네트워크
      • 자료구조 & 알고리즘
      • 운영체제
      • 정보보호
      • 기타 분야
    • 소프트웨어
      • 소프트웨어공학
      • 프로그래밍 언어

공지사항

인기 글

태그

  • 팀 프로젝트
  • 개인 Term Project

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
2sjin

2sjin

Linux/Linux 과제

[임베디드 과제] GCC, G++ 컴파일러 이해

2022. 10. 10. 23:35

1. GCC(GNU C Compiler)

  • c 파일은 C 언어로, cpp 파일을 C++ 언어로 컴파일함
  • C 라이브러리에 링크됨
  • 명령어: 실행 파일 생성
$ gcc [옵션] [파일명]

※ GCC가 C++, Java, Go, 포트란, 에이다 등 여러 언어를 컴파일할 수 있게 되면서, GCC는 GNU Compiler Collection의 약어로 쓰이게 됨

 

2) G++(GNU C++ Compiler)

  • c 파일과 cpp 파일 모두 C++ 언어로 컴파일함
  • C++ 라이브러리에 링크됨
  • 명령어: 실행 파일 생성
$ g++ [옵션] [파일명]

 

 

3) 컴파일 옵션

옵션 설명 및 예시
-o [filename] 실행 파일 이름을 특정 이름으로 생성함
(해당 옵션 없이 실행 파일이 생성될 경우, 기본 이름은 a.out)

-v 컴파일 상세 결과 출력
-g gdb를 통해 디버깅할 수 있도록 정보 생성
-save-temps 중간 과정 파일 보존(전처리, 오브젝트, 어셈블리 등)

-E 전처리 결과를 콘솔에 표준 출력함(컴파일은 하지 않음)

-c 실행 파일 대신 오브젝트 파일(.o) 생성

-S 실행 파일 대신 어셈블리 파일(.s) 생성

 
 
4) 라이브러리 링크 옵션
옵션 설명 및 실행 예시
-l[library] 라이브러리 이름을 작성(첫 ‘lib’, 끝 ‘.a’는 생략)
-L[directory] 라이브러리가 포함된 디렉토리를 작성
-shared 공유 라이브러리 우선 링크(Default)
-static 정적 라이브러리 우선 링크

 

※ 공유 라이브러리와 정적 라이브러리

종류 설명
공유 라이브러리
(Shared Library)
■ 아카이브 파일명 형식: lib*.so
■ 프로그램이 실행될 때 라이브러리가 함께 메모리에 적재됨
■ 다른 프로그램에 의해 라이브러리가 이미 메모리에 적재된 경우에는 추가로 적재하지 않음
■ 실행 도중 라이브러리를 적재하므로, 실행 속도가 상대적으로 느림
정적 라이브러리
(Static Library)
■ 아카이브 파일명 형식: lib*.a
■ 라이브러리가 프로그램과 함께 컴파일됨
■ 상대적으로 실행 속도가 빠름, 이식성이 좋음
■ 파일 크기가 커짐, 메모리 및 저장공간의 비효율적 사용

 

※ 라이브러리 아카이브 파일 생성 명령어

$ ar [옵션] [아카이브_파일명] [오브젝트_파일명]

 

자주쓰는 옵션 설명 및 실행 예시
r 아카이브 파일 내 존재하는 오브젝트 파일이면 덮어쓰기,
새로운 오브젝트 파일이면 신규 추가함
c 아카이브 파일이 존재하지 않으면 신규 생성함

 

※ 라이브러리 링크 옵션 사용 예시

① 라이브러리에 포함할 소스 코드(좌) 및 테스트 프로그램(우) 작성



 

 

② 목적 파일 생성

 

③ 라이브러리 아카이브 파일 생성

 

④ GCC 컴파일 수행 및 프로그램 실행

 

 

저작자표시 (새창열림)

'Linux > Linux 과제' 카테고리의 다른 글

[임베디드 과제] make와 gcc로 C 프로그램 컴파일  (0) 2022.10.11
[임베디드 과제] 클랭(Clang) 컴파일러  (0) 2022.10.11
[임베디드 과제] GDB(GNU Bebugger) 기본 명령어  (0) 2022.10.10
[임베디드 과제] Bash Shell 프로그래밍 간단 예제  (0) 2022.10.04
'Linux/Linux 과제' 카테고리의 다른 글
  • [임베디드 과제] make와 gcc로 C 프로그램 컴파일
  • [임베디드 과제] 클랭(Clang) 컴파일러
  • [임베디드 과제] GDB(GNU Bebugger) 기본 명령어
  • [임베디드 과제] Bash Shell 프로그래밍 간단 예제
2sjin
2sjin

티스토리툴바