Linux개발 환경

2025. 7. 17. 13:18·Linux

Linux 개발 환경

Build

source code -> binary(excutable)

Host

빌드 진행 환경

Target

빌드된 바이너리가 동작할 환경

타겟마다 바이너리가 다름(C경우 플랫폼 의존성)

Toolchain

원하는 타겟에 맞춰서 빌드해주는 개발 도구 모음

  • Compiler: 소스코드 -> 바이너리 (.c -> .obj)
  • Library: 함수 모음 (SDK)
  • Linker: .obj들, 라이브러리들을 모아 하나의 바이너리로 결합

C 런타임 (CRT, C Runtime)

C언어 main에 이르기까지의 초기화 작업

  • OS마다 환경변수, 파라미터 다루는 방식 초기화 방식 등이 다름
  • 근데 main()의 형식은 같음 -> 어떻게?
  • C Runtime obj파일이 이런 작업들을 해주고 -> main호출

라이브러리

개발자가 직접 작성한 함수 아님, 거의 라이브러리 참조함

C언어의 기본 함수 libc라는 라이브러리 참조

기본위치 (작성자 컴은 Arm이다. x86기반은 또 다를 것임)

/usr/lib/aarch64-linux-gnu

대표적인 라이브러리

  • libm: math.h, 수학 관련
  • libz: 압축 관련, zlib.h
  • libpthread: 스레드 관련, pthread.h
  • libstdc++: C++기본 라이브러리

라이브러리 링킹해서 실행파일

main.c

distance.c

distance.h

가 있다고 가정

distance.h에는 pow와 sqrt함수를 사용한다.(math.h를 include해야함)

  1. gcc -c \*.c : 모든 C파일 컴파일해서 .obj파일로 생성
  2. main.o, distance.o가 생성됨
  3. ld *.o /usr/aarch64-linux-gnu/crt1.o -lm -lc : libc와 libm라이브러리 지정, C Runtime 목적파일 링킹
  4. a.out 생성됨

빌드 시스템

  • Makefile: 가장 많이 쓰임
  • CMake: CMakelists.txt로 작성하며, Makefile로 번역되어 사용
  • Ninja

Makefile

  • Target 생성하고자 하는 것
    • 맨 앞에 작성, :(콜론)으로 의존성 구분
    • .PHONY 로 지정
  • Dependency 필요한 것
    • :(콜론)뒤에 여러개 나열하며 comma(,)로 각각 구분
  • Command 해야하는 것
    • shell 스크립트 형식으로 작성
    • 한줄이 하나의 프로세스

Example

executable: distance.o main.o
	ld *.o /usr/aarch64-linux-gnu/crt1.o -lm -lc

distance.o: distance.c
	gcc -c -o distance.o distance.c

main.o: main.c
	gcc -c -o main.o main.c
  • distance.o 와 main.o를 링킹해서 실행파일 생성
  • distance.o를 만들기위해 distance.c를 사용
  • main.o를 만들기위해 main.c사용

'Linux' 카테고리의 다른 글

OS 기초 이론  (0) 2025.07.23
Rootfs와 Kernel 빌드 (feat Makefile)  (0) 2025.07.21
Arm 어셈블리 명령어 간단 소개  (0) 2023.08.10
Arm프로세서와 Arm아키텍쳐  (0) 2023.08.09
프로젝트 단계 별 시스템 소프트웨어 개발 과정 정리  (0) 2023.08.09
'Linux' 카테고리의 다른 글
  • OS 기초 이론
  • Rootfs와 Kernel 빌드 (feat Makefile)
  • Arm 어셈블리 명령어 간단 소개
  • Arm프로세서와 Arm아키텍쳐
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    드라이버 분석
    피보나치
    Branch
    시스템콜
    버퍼
    c언어
    토발즈
    파일 입출력
    이진 트리
    Qualcomm
    yolo
    소수
    commit
    포인터
    arm
    C++
    스택
    파이썬
    순환
    rubik pi
    리눅스
    커널
    동적메모리
    rubikpi3
    자료구조
    앤드류모튼
    백준
    커널 기여
    Git
    INIT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
Linux개발 환경
상단으로

티스토리툴바