Jumping Bytes and Hopping Bits
the church of tech
Menu

g++ 컴파일 예제 August 2, 2019

이 컴파일의 출력은 MyProgram.class라는 파일 (그리고 아마도 다른 .class 파일)이 될 것입니다. 이러한 컴파일러의 또 다른 유용한 옵션은 -D입니다. 옵션 -Dname=value를 추가하면 프로그램의 식별자 이름의 모든 발생이 값으로 바뀝니다. 이 기능은 프로그램을 편집하지 않고 사용자 지정하는 방법으로 유용할 수 있습니다. 값 -Dname 없이이 옵션을 사용 하는 경우 컴파일러는 여전히 해당 이름이 “정의”되었습니다. 이 기능은 컴파일러 지시문 #ifdef 함께 사용하면 특정 이름이 정의된 경우에만 특정 코드가 컴파일됩니다. 예를 들어 많은 프로그래머가 디버깅 출력을 코드에 삽입합니다: 컴파일 단위가 컴파일될 때 일반적으로 “.o”로 끝나는 개체 코드 파일을 얻습니다. 이러한 파일은 “거의” 실행 가능한 이진 파일입니다 – 일부 변수 및 함수의 경우 해당 변수 / 함수의 실제 주소 대신 여전히 이름이 있습니다. 이는 변수 또는 함수가 선언되었지만 해당 컴파일 단위에 정의되지 않은 경우 발생합니다(사전 프로세서에 의한 #includes 확장 후). 해당 이름은 해당 이름의 정의가 포함된 파일이 컴파일될 때만 주소가 할당됩니다.

그리고 해당 주소는 이름이 정의된 컴파일 단위 소스 파일에 해당하는 개체 코드 파일에만 기록됩니다. 실행 파일은 완전한 컴퓨터 언어 프로그램입니다. 이름(또는 경로)을 명령으로 입력하기만 하면 명령에서 실행할 수 있습니다. 현재 디렉터리에 있는 실행 파일을 실행하려면 앞에 ./ 로 작성합니다. 예를 들어 여러 파일로 구성된 프로그램이 별도로 컴파일되는 경우 각 컴파일에 -c 옵션을 추가합니다. 이렇게 하면 컴파일러가 실행 파일 대신 .o 개체 코드 파일을 생성합니다. 그런 다음 -c 없이 모든 .o 파일에 컴파일러를 호출하여 함께 연결하고 실행 파일을 생성합니다: 헤더 및 비헤더 파일은 프로그램을 빌드할 때 다르게 처리됩니다. 헤더가 아닌 각 파일은 다른 파일과 별도로 컴파일됩니다(그림 1). 이렇게 하면 특히 프로그램에서 버그를 수정하고 헤더가 아닌 파일하나 또는 두 개만 변경했을 때 컴파일 시간을 합리적으로 유지할 수 있습니다. 변경된 파일만 다시 컴파일하면 됩니다.

프로그램에 이전에 컴파일된 라이브러리의 함수가 필요할 수 있습니다. 예를 들어 sqrt 및 기타 수학 함수는 “m” 라이브러리에 보관됩니다(파일 이름은 실제로 libm.a). 이 라이브러리의 함수를 프로그램에 추가하려면 “-lm” 옵션을 사용합니다. (“-lm”의 “m”은 라이브러리 이름입니다. 이것은 링크 옵션이므로 명령의 끝에 간다 : 소스 파일의 두 가지 종류가 있습니다 : 헤더 파일 및 컴파일 단위. 헤더 파일은 일반적으로 “.h”로 끝나는 이름이 지정됩니다. 컴파일 단위 파일은 일반적으로 C++ 코드의 경우 “.cpp”로 끝나는 이름과 C 코드의 경우 “.c”로 끝납니다. 이러한 차이와 전체 컴파일/빌드 프로세스의 작동 방식(그림 1)을 이해하면 일반적이지만 혼란스럽게 유사한 오류 메시지를 설명하는 데 도움이 될 수 있습니다. 예를 들어 여기에 표시된 코드는 매우 기본적입니다.

그러나 #include 문은 C ++ 표준 라이브러리에서 I / O 및 문자열 관련 선언의 전체 라이브러리를 가져옵니다. 예를 들어, 여기에 해당 작은 코드 블록에 대한 하나의 컴파일러에 대한 사전 프로세서의 출력입니다.

Categories: Uncategorized