gcc 컴파일러 (+ .so, .a, .o, .c, 비트 연산 내장 함수)

728x90

[GCC의 개념]

GCC는 GNU 컴파일러 모음(GNU Compiler Collection)의 약자이다. GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 오픈소스 컴파일러이다. 유닉스/리눅스 계열 플랫폼의 표준(사실상) 컴파일러라고도 볼 수 있다.

더보기

GNU: GNU's not UNIX, 리처드 스톨먼이 각종 자유 소프트웨어들이 작동되고 널리 퍼질 수 있는 생태계를 구축하기 위해 시작한 프로젝트이다.

GCC에는 C, C++, Objective-C, Fortran, Ada, Go, D, libstdc++와 같은 라이브러리 언어 등이 포함되어 있다.

 

<MinGW>

Minimallist GNU for Windows, 윈도우용 포크. 여러 오픈 소스 프로그램들을 윈도우에서 돌아가게 하는 데 일조한다.

MinGW는 MSYS(Minimallist SYStem)과 함께 구동되는데, 윈도우에서의 유닉스 터미널 환경을 제공해준다. 윈도우 환경을 그대로 유지하되 리눅스 명령어만 사용해야 할 경우(오픈 소스 라이브러리를 빌드할 때) 유용하게 쓰인다.

 

gcc 컴파일러의 컴파일 과정

<4단계 컴파일 과정>

  • 전처리 단계(gcc -E main.c -o main.i)
  • 컴파일 단계(gcc -S main.i -o main.s)
  • 어셈블 단계(gcc -c main.s -o main.o -> hexdump main.o)
  • 링크 단계(gcc main.o -o main.exe)

.c

C언어의 소스코드 파일.

.i

전처리 단계를 거친 C파일

.s

컴파일 단계를 거친 어셈블리어 파일

.o

어셈블 단계를 거친 오브젝트 파일

.exe (a.out - linux)

링크 단계를 거친 실행파일

 

+) .a(archive - 정적 라이브러리) / .so(shared object - 공유 라이브러리)

 

<비트 연산 내장 함수>

C/C++의 기능이 아닌 컴파일러 자체의 기능이다. 아래 함수들은 모두 unsigned int(32bit)를 기준으로 작동하며, unsigned long long 타입을 쓸 땐 함수 이름 뒤에 ll를 붙여주면 된다.

 

1. __builtin_popcount: 비트의 개수를 반환한다. (__builtin_popcount(n))

2. __builtin_ctz: 오른쪽 0의 개수를 반환한다.(__builtin_ctz(n))

3. __builtin_clz: 왼쪽 0의 개수를 반환한다. (__builtin_clz(n))

 

 

 

참고자료

 

728x90