리눅스_커맨드라인_완벽입문_23

프로그램 컴파일

소프트웨어를 컴파일 해야하는 이유

  • 가용성: 배포판 장소에는 다수의 사용가능한 프로그램에도 불구하고, 어떤 배포판은 사용자가 원하는 모든 프로그램을 가지고 있지 않을 수도 있다. 이런 경우, 필요한 프로그램을 얻는 방법은 소스로부터 그 프로그램을 컴파일하여 만드는 것뿐이다.
  • 적시성: 어떤 배포판은 최신 버전의 프로그램 을 가지고 있는 반면, 그렇지 않은 경우도 많다. 이는 가장 최신 버전을 갖기 위해서는 컴파일이 필수적이라는 뜻이다.

컴파일링이란?

즉, 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어 주는 과정, 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해하고 실행할 수 있는 기계어로 변환하는 과정을 컴파일

기계어, 어셈블리어, 고급프로그래밍 언어

컴퓨터 프로세서는 매우 기본적인 단계에서 동작하여 기계어로 실행, 각각의 명령어는 이진법으로 표현

→ 이러한 문제를 해결하기 위해 어셈블리어 등장, 숫자 코드를 대신하여 더쉽게 사용할 수 있는 연상 기호 사용, 어셈블리어로 짜인 프로그램들은 어셈블러라는 프로그램에 의해 기계어롤 처리

→ 프로그래머가 프로세서 동작의 세부사항에 덜 고민하고, 더 쉽게 문제를 해결할 수 있게 도와주는 고급 프로그래밍언어 등장, 고급 프로그래밍 언어로 작성된 프로그램은 컴파일러라고 하는 프로그램에 의해 처리되어 기계어로 변환

컴파일링과 링킹

프로그램들은 파일 열기와 같은 공통적인 작업들을 많이 수행하는데, 효율적으로 처리하기 위해 프로그램 코드를 필요로 하는 모든 프로그램이 공유하게 하는 것이 더 현명→ 공통 작업의 지원은 라이브러리를 통해

이때 링커라는 프로그램은 컴파일러의 출력물과 컴파일된 프로그램이 필요한 라이브러리를 연결하는 데 사용된다.

인터프리터 언어가 인기있는 이유?

일반적으로 컴파일된 프로그램보다 더 빠르고 쉽게 프로그램을 개발할 수 있다는 장점이 있기 때문에

프로그램은 항상 코드, 컴파일, 테스트의 반복 순환으로 개발된다. 프로그램 의 크기가 커짐에 따라 파일 단계는 꽤 오랜 시간이 걸릴 수 있다.

인터프리트 언어는 그러한 컴파일 단계가 없어서 프로그램 개발에 속도를 낼 수 있다.

타르볼

리눅스에서 타르볼(tarball)은 여러 파일과 디렉토리를 하나의 파일로 묶어서 압축하는 방식을 말함. 타르볼은 tar라는 유틸리티를 사용하여 생성하고, 압축 형식으로 gzip, bzip2, xz 등을 사용 가능.

타르볼은 일반적으로 소프트웨어 패키지를 배포할 때 사용. 소스 코드와 관련 파일들을 타르볼로 묶은 후에 압축하여 배포하는 것이 일반적인 방식. 이러한 소스 코드 타르볼은 사용자가 소스 코드를 컴파일하여 실행 파일을 만들고 설치할 수 있도록 하여 배포.

tar -cvf [파일명.tar] [묶을 파일/디렉토리 경로]

타르볼을 압축하는 방법 gzip을 사용

tar -czvf [파일명.tar.gz] [묶을 파일/디렉토리 경로]



헤더 파일

GNU 프로젝트에 속한 프로그램들은 README, INSTALL과 같은 문서 파일을 제공할 것이다. 이 파일들은 프로그램을 설명하고 빌드 및 설치 방법과 해당 라이선스 조항에 대한 정보를 포함하고 있다. 프로그램을 빌드하기 전에 항상 README와 INSTALL 파일을 주의 깊게 읽어보는 것이 좋은 방법!

configure 프로그램

configure 프로그램은 소스 트리와 함께 제공된 쉘 스크립트이며 빌드 환경을 분석하는 역할을 한다. 즉 유닉스형 스템 중 하나 이상의 텝에서 빌드할 수 있도록 있게된다는 것이다. 하지만 그렇게 하기 위해서 빌드하는 보안 소스 코드에 약간의 수정이 필요할지도 모른다. 각 코드들 간의 자이 점을 수용하기 위해서이다. 또한 configure는 필수적인 외부 툴과 컴포트가 설치 되어 있는지를 검사한다. configure를 실행 해보자. configure 는 쉘이 일반적으로 예상하는 프로그램에 있지 않기 때문에 반드시 /와함께 명령어를 사용해야한다. 이것은 해당 프로그램이 현재 작업 디렉토리에 있다는것을나타낸다.

make와 make install

make는 소스 코드를 컴파일하여 실행 가능한 바이너리 파일을 생성하는 데 사용. make는 Makefile이라는 파일을 사용하여 컴파일 프로세스를 지시. Makefile은 컴파일할 파일과 의존성을 지정하며, 컴파일 옵션을 설정.

make install은 컴파일된 바이너리 파일을 시스템에 설치하는데 사용. make install 명령어를 사용하면 실행 파일, 라이브러리, 헤더 파일 등이 시스템에 설치. 이러한 파일은 일반적으로 /usr/local/bin, /usr/local/lib 등의 디렉토리에 설치.

make와 make install 명령어는 소프트웨어를 컴파일하고 설치하는 데 필요한 많은 작업을 자동화. 이를 통해 개발자는 소스 코드를 컴파일하여 실행 가능한 바이너리 파일로 변환하고 시스템에 설치하는 프로세스를 간소화할 수 있음

서브목차