Gcc 컴파일러는 C 및 C++ 언어의 소스 프로그램, 어셈블러 및 대상 프로그램 컴파일을 실행 파일에 연결할 수 있습니다. 실행 파일 이름을 지정하지 않으면 gcc 는 a.out 이라는 파일을 생성합니다. Linux 시스템에서는 실행 파일에 일정한 접미사가 없고 실행 파일과 실행 파일을 속성에 따라 구분합니다. Gcc 는 꼬리말을 사용하여 입력 파일의 범주를 구별합니다. 다음은 gcc 가 따르는 몇 가지 규칙 중 일부입니다.
。 C 는 접미사 파일, c 언어 소스 코드 파일입니다.
가지고 있는 서류. 접미사는 대상 파일로 구성된 아카이브입니다.
접미사가 인 파일. C,. 참조 또는. Cxx 는 C++ 소스 코드 파일입니다.
포함된 파일. H 접미사는 프로그램에 포함 된 헤더 파일입니다.
포함된 파일. I 접미사는 전처리 된 c 소스 코드 파일입니다.
포함된 파일. Ii 접미사는 전처리 된 C++ 소스 코드 파일입니다.
포함된 파일. M 접미사는 Objective-C 소스 코드 파일입니다.
포함된 파일. O 접미사는 컴파일 된 대상 파일입니다.
파일 한 개. S 접미사는 어셈블리 언어 소스 코드 파일입니다.
접미어가 붙은 파일. S 는 미리 컴파일된 어셈블리 언어 소스 코드 파일입니다.
Gcc 구현 프로세스
Gcc 를 C 언어의 컴파일러라고 부르지만, Gcc 를 사용하여 C 언어의 소스 코드 파일에서 실행 파일을 생성하는 과정은 컴파일 프로세스일 뿐만 아니라 사전 처리, 컴파일, 어셈블리, 링크 등 네 가지 상호 연관된 단계를 포함합니다.
명령 gcc 는 먼저 사전 처리를 위해 CPP 를 호출합니다. 사전 처리 중에 파일에는 매크로 정의 등과 같은 사전 컴파일된 문이 포함되어 있습니다. ) 소스 코드 파일에서 분석합니다. 그런 다음 컴파일을 위해 cc 1 을 호출합니다. 이 단계에서. O 접미사는 입력 파일에서 생성됩니다. 어셈블리 프로세스는 어셈블리 언어의 단계로, as 를 호출하여 작동합니다. 일반적으로 어셈블리 언어의 소스 코드 파일이 사용됩니다. 접미사의 어셈블리 언어 파일입니다. 접미어는 모두 대상 파일을 생성합니다. 사전 컴파일 및 어셈블된 o 접미사 모든 대상 파일이 생성되면 gcc 는 LD 를 호출하여 마지막 주요 작업을 완료합니다. 이 단계는 연결입니다. 연결 단계에서 모든 대상 파일은 실행 파일에서 적절한 위치에 정렬되고 프로그램에서 호출하는 라이브러리 함수도 해당 파일에서 적절한 위치에 연결됩니다.
Gcc 의 기본 사용법 및 옵션
Gcc 컴파일러를 사용할 때는 필요한 일련의 호출 매개변수와 파일 이름을 제공해야 합니다. Gcc 컴파일러의 호출 매개 변수는 100 개 이상이며 대부분 전혀 사용되지 않을 수 있습니다. 여기서는 가장 기본적이고 가장 일반적으로 사용되는 매개변수만 소개합니다.
Gcc 의 가장 기본적인 용도는 GCC [옵션] [파일 이름] 입니다.
여기서 options 는 컴파일러에 필요한 매개변수이고 filenames 는 관련 파일 이름을 제공합니다.
-c, 컴파일만 하고 실행 파일로 링크하지 않습니다. 컴파일러는 접미사가 있는 대상 파일만 생성합니다. O 에서 가져온 소스 코드 파일은 다음과 같습니다. C 는 일반적으로 마스터 프로그램을 포함하지 않는 하위 프로그램 파일을 컴파일하는 데 사용됩니다.
-o output_filename, 출력 파일 이름이 output_filename 인지, 소스 파일과 이름이 달라야 합니다. 이 옵션을 제공하지 않으면 gcc 는 미리 설정된 실행 파일 a.out 를 제공합니다.
-g, 기호 디버깅 도구 (GNU 의 gdb) 생성에 필요한 기호 정보. 소스 코드를 디버깅하려면 이 옵션을 추가해야 합니다.
-O, 최적기 컴파일 및 연결. 이 옵션을 사용하면 컴파일 및 연결 중 전체 소스 코드가 최적화되므로 생성된 실행 파일의 실행 효율성이 향상되지만 컴파일 및 링크 속도는 느려집니다.
-O2 는 컴파일 연결을 최적화하는 데 -O 보다 낫습니다. 물론 전체 컴파일 연결 프로세스가 느려집니다.
-Idirname 은 프로그램 헤더 파일의 디렉토리 목록에 dirname 으로 표시된 디렉토리를 추가합니다. 사전 컴파일 중에 사용되는 매개변수입니다. C 프로그램의 헤더 파일에는 두 가지 상황이 포함되어 있습니다.
A)# 포함
B)# 에는 "myinc.h" 가 포함되어 있습니다
여기서 클래스 a 는 꺾쇠 괄호 (
-Ldirname 은 dirname 으로 표시된 디렉토리를 프로그램 함수 아카이브의 디렉토리 목록에 추가합니다. 연결 중 사용되는 매개변수입니다. 기본적으로 링커 LD 는 시스템의 기본 경로 (예: /usr/lib) 에서 원하는 아카이브 파일을 검색합니다. 이 옵션은 링커에게 먼저 -L 로 지정된 디렉토리를 검색한 다음 시스템의 기본 경로를 검색하도록 지시합니다. 라이브러리가 여러 디렉토리에 저장된 경우 이 옵션을 차례로 사용하여 적절한 저장 디렉토리를 제공해야 합니다.
-lname, 연결할 때 시스템 사전 설정 디렉토리 또는 -L 옵션에 의해 결정된 디렉토리에 있는 "libname.a" 라는 라이브러리를 로드합니다. 예를 들어 -lm 은 "libm.a" 라는 수학 라이브러리를 연결하는 것을 의미합니다.
앞서 gcc 컴파일러에서 가장 일반적으로 사용되는 함수 및 주요 매개변수 옵션에 대해 간략하게 설명했습니다. 자세한 내용은 Linux 시스템의 온라인 도움말을 참조하십시오.
Test.c 라는 C 언어 소스 코드 파일이 있다고 가정해 보겠습니다. 실행 파일을 생성하는 가장 쉬운 방법은 다음과 같습니다.
Gcc 테스트
이 시점에서 사전 컴파일 및 컴파일 연결은 한 번에 완료되며 시스템 사전 설정에 의해 a.out 이라는 실행 파일이 생성됩니다. 소스 코드 파일이 여러 개 있거나 아카이브에 연결해야 하거나 기타 특수한 요구 사항이 있는 경우와 같이 좀 더 복잡한 경우에는 적절한 호출 옵션 매개변수를 제공해야 합니다. 간단한 예를 하나 더 보세요.
전체 소스 코드 프로그램은 testmain.c 와 testsub.c 라는 두 개의 파일로 구성됩니다. 이 두 파일은 시스템에서 제공하는 수학 라이브러리를 사용하며 실행 파일은 test 로 추정됩니다. 이때 컴파일 명령은 다음과 같습니다.
Gcc test main. c test sub c□lm□o 테스트
여기서 -lm 은 연결 시스템의 수학 라이브러리 libm.a 를 나타냅니다.
Gcc 의 오류 유형 및 대책
Gcc 컴파일러가 소스 프로그램에서 오류를 발견하면 계속할 수 없으며 최종 실행 파일을 생성할 수 없습니다. Gcc 는 쉽게 수정할 수 있도록 오류 메시지를 제공합니다. 이러한 오류 메시지를 하나씩 분석 및 처리하고 소스 코드가 올바르게 컴파일되고 연결되도록 해당 언어를 수정해야 합니다. Gcc 가 제공하는 오류 메시지는 일반적으로 네 가지 범주로 나눌 수 있습니다. 원인과 대책을 따로 논의해 보겠습니다.
첫 번째 범주: 클래스 c 구문 오류
오류 메시지: 파일 source 에 구문 오류 (syntex error)C 가 있습니다. 이러한 유형의 오류는 일반적으로 c 언어의 구문 오류입니다. 따라서 소스 코드 파일에서 n 행 앞의 프로그램을 자세히 확인해야 하며, 경우에 따라 이 파일에 포함된 헤더 파일도 확인해야 합니다. 경우에 따라 gcc 는 간단한 구문 오류에 대해 많은 오류를 제공합니다. 우리의 가장 중요한 것은 맑은 머리를 유지하는 것이다. 그것에 놀라지 말고, 필요할 때 C 언어의 기초 교재를 참고하는 것이다.
두 번째 범주: 헤더 파일 오류
오류 메시지: 헤더 파일 head.h 를 찾을 수 없습니다 (포함 파일 head.h 를 찾을 수 없음). 이 오류는 소스 코드 파일의 헤더 파일에 문제가 있다는 것입니다. 가능한 원인으로는 헤더 파일 이름 오류, 헤더 파일을 지정하는 디렉토리 이름 오류 등이 있습니다. , 또는 큰 따옴표와 꺾쇠 괄호의 잘못된 사용.
세 번째 범주: 아카이브 오류
오류 메시지: 링커가 필요한 라이브러리를 찾을 수 없습니다. 예를 들면 다음과 같습니다.
Ld: -lm: 그런 파일이나 디렉토리가 없습니다
이 오류는 대상 파일에 연결된 라이브러리의 오류입니다. 가능한 원인은 라이브러리 이름 오류와 지정된 라이브러리가 있는 디렉토리 이름이 잘못되었기 때문입니다. Find 명령을 사용하여 가능한 디렉토리에서 해당 라이브러리 이름을 찾고, 아카이브 및 디렉토리 이름을 결정하고, 프로그램 및 컴파일 옵션에서 이름을 수정하는 방법을 확인합니다.
카테고리 4: 정의되지 않은 기호
오류 메시지: 정의되지 않은 기호가 있습니다. 이 오류는 연결 과정에서 발생할 수 있습니다. 하나는 사용자 정의 함수 또는 전역 변수가 있는 소스 코드 파일이 컴파일, 연결 또는 전혀 정의되지 않았으며, 사용자가 실제 상황에 따라 소스 프로그램을 수정하여 전역 변수 또는 함수의 정의체를 제공해야 한다는 것입니다. 둘째, 정의되지 않은 기호는 소스 프로그램에서 사용되는 표준 라이브러리 함수이지만 연결 중 해당 라이브러리의 이름이 제공되지 않았거나 보관된 디렉토리 이름에 문제가 있습니다. 이때 아카이브 유지 관리 명령 ar 을 사용하여 필요한 라이브러리 함수를 확인한 다음 gcc 연결 옵션에서 -l 및 -L 항목을 수정해야 합니다.
연결을 컴파일하는 동안 오류를 제거하는 것은 프로그램 설계에서 가장 간단하고 기본적인 단계일 뿐 시작일 뿐이라고 할 수 있습니다. 이 과정의 실수는 우리가 C 언어로 알고리즘을 묘사할 때 범한 실수일 뿐 비교적 쉽게 없앨 수 있다. 컴파일되고 연결될 때까지 프로그램을 작성합니다. 이제 막 시작되었다고 말해야 한다. 프로그램 실행 중에 발생하는 문제는 알고리즘 설계의 문제이다. 보다 구체적으로 말하자면, 우리는 문제에 대한 인식과 이해가 부족하여 더 심도 있는 테스트, 디버깅 및 수정이 필요하다. 프로그램, 좀 더 복잡한 프로그램은 종종 컴파일, 연결, 테스트, 수정을 여러 번 해야 한다. 우리가 배운 프로그램 유지 관리, 디버그 도구, 버전 유지 관리는 모두 프로그램 디버깅 및 테스트 과정에서 사용되어 디버깅 단계 문제를 해결합니다. 페이지
양식 맨 아래