라떼군 뉴스
C 프로그램 컴파일, 더 이상 포기하지 마세요!
이 글은 다음 링크를 참고하여 인사이트를 더한 것입니다. 원문은 해당 링크에서 확인해주세요: https://jvns.ca/blog/2025/06/10/how-to-compile-a-c-program/↗
C/C++ 프로그래머가 아니더라도 소스 코드에서 C 프로그램을 컴파일해야 하는 상황은 종종 발생합니다. 과거에는 의존성을 설치하고 make
를 실행한 다음, 안 되면 포기하거나 누군가 컴파일해둔 바이너리를 찾는 것이 일반적이었지만, 이제는 직접 컴파일해야 하는 경우가 늘고 있습니다.
C 프로그램을 컴파일하기 위한 단계는 다음과 같습니다.
- C 컴파일러 설치: Ubuntu에서는
sudo apt-get install build-essential
(gcc, g++, make 포함)을, Mac에서는 Xcode Command Line Tools를 설치해야 합니다. - 프로그램 의존성 설치: C는 의존성 관리자가 없으므로, README 파일에서 필요한 라이브러리를 확인하고 직접 설치해야 합니다. 예를 들어,
paperjam
의 경우libqpdf-dev
와libpaper-dev
가 필요하며,sudo apt install -y libqpdf-dev libpaper-dev
로 설치할 수 있습니다. Mac에서는 Homebrew를 통해 해당 패키지를 찾아서 설치해야 합니다. ./configure
실행 (필요한 경우): 일부 C 프로그램은 Makefile 대신./configure
스크립트를 제공합니다. 이를 실행하면 Makefile을 생성하거나 누락된 의존성으로 인해 실패할 수 있습니다. 이는 ‘autotools’ 시스템의 일부입니다.make
실행:make
명령어를 사용하여 프로그램을 빌드합니다.make -j8
을 사용하면 빌드 속도를 높일 수 있습니다. 컴파일러 오류가 발생하는 경우, 대부분 의존성 문제일 가능성이 높습니다.- 컴파일러 및 링커 이해: C 프로그램 빌드는 코드를 오브젝트 파일로 컴파일(gcc 또는 clang 사용)하고, 이 오브젝트 파일들을 최종 바이너리로 링크(ld 사용)하는 두 단계로 나뉩니다. 의존성 문제를 해결하려면 컴파일러와 링커에 올바른 플래그를 전달해야 합니다.
make
환경 변수 활용:make
는 환경 변수를 통해 컴파일러와 링커에 추가 파라미터를 전달할 수 있습니다. 예를 들어LDLIBS
는 링커에,CPPFLAGS
는 C 컴파일러에 전달됩니다. 헤더 파일을 찾기 위한-I
플래그, 라이브러리 파일을 찾기 위한-L
플래그, 그리고 특정 라이브러리를 링크하기 위한-l
플래그를 이해하는 것이 중요합니다.- 예시:
CPPFLAGS="-I/opt/homebrew/include" LDLIBS="-L/opt/homebrew/lib -liconv" make paperjam
- 예시:
- 특정 파일만 빌드:
make $FILENAME
을 사용하여 특정 파일만 빌드할 수 있습니다. - 다른 패키징 시스템 참조: 빌드에 어려움이 있다면, 다른 리눅스 배포판의 빌드 파일을 참고하여 힌트를 얻을 수 있습니다. 예를 들어,
nix package for paperjam
은 Mac에서 빌드할 때-liconv
링커 플래그가 필요하다고 명시하고 있습니다. - 바이너리 설치: 컴파일이 완료되면
make install
을 사용하거나, 간단한 프로그램의 경우cp [바이너리] ~/bin
과 같이 수동으로 바이너리를 설치할 수 있습니다.
C 프로그래머가 아니더라도 C 프로그램의 작동 방식에 대한 기본적인 이해는 유용합니다. 컴파일러와 링커 플래그에 대한 완전한 지식 없이도, 기본적인 문제 해결 능력을 갖추는 것이 중요하며, 이는 시스템 전반에 대한 통찰력을 길러줍니다.
ShareC 프로그램 컴파일, 더 이상 포기하지 마세요! C 프로그램 컴파일, 막막하셨나요? 컴파일러 설치부터 의존성 해결, Makefile 사용법까지. 이 가이드로 C 컴파일의 미스터리를 풀어내고 더 이상 좌절하지 마세요! C 프로그램 컴파일은 단순히 명령어를 입력하는 것을 넘어, 시스템과 환경에 대한 깊은 이해를 요구하는 과정입니다. 특히 의존성 관리와 빌드 시스템의 작동 원리를 파악하는 것이 중요하며, 이는 결국 문제 해결 능력과 시스템 전반에 대한 통찰력을 길러줍니다. #C언어 #컴파일 #빌드 #개발환경설정 #메이크파일 #의존성관리 https://news.mrlatte.net/posts/2025/06/12/compile-c-programs-for-non-c-programmers/