arm-linux-gnu-gcc 및 arm-linux-gcc

arm-linux-gnu-gcc 및 arm-linux-gcc

ARM용 C 프로그램 크로스 컴파일에 사용해야 하는 것과 arm-linux-gnu-gcc 의 차이점은 무엇입니까 ?arm-linux-gcc

답변1

프로세서("베어 메탈" 시스템)에서 독립적으로 실행되도록 프로그램을 컴파일하려는 경우 가장 중요한 것은 해당 특정 프로세서에 대한 명령을 생성하는 컴파일러를 갖는 것입니다. "For ARM"은 거의 충분한 정보이지만 충분하지 않습니다. 명령어 세트의 버전도 지정해야 합니다. 오늘날 대부분의 ARM 프로세서는 동일한 버전(ARMv7)을 기반으로 하지만 내부적으로도 많은 복잡성이 있습니다. 일부 기능(예: 부동 소수점, 벡터 명령어)은 선택 사항이므로 사용 여부를 지정해야 하지만 ARMv7 실제로는 두 가지 명령어 세트("일반" ARM 및 Thumb)가 있습니다. 대부분의 ARM용 GCC 배포판은 ARMv7을 대상으로 하며 옵션 기능과 Thumb이 옵션을 통해 활성화됩니다.

다른 프로그램과 상호 작용하는 프로그램을 컴파일하려면 관련된 모든 프로그램이 통신할 수 있어야 합니다. 시스템 호출과 더 중요한 것은 라이브러리 호출을 수행하려면 호출자와 호출 수신자가 데이터의 이진 표현(예: 바이트 순서)과 데이터 전달 방법(함수 인수에 사용되는 레지스터, 함수 호출이 데이터에 미치는 영향)에 동의해야 합니다. 스택 등). 작동 원리의 사양은 다음과 같습니다.ABI(애플리케이션 바이너리 인터페이스).

이것GCC 크로스 컴파일러의 일반적인 명명 규칙예(이전 부분은CPU-VENDOR-SYSTEM-gcc-gcc시스템 유형) configure그러나 그 부분에는 다소 모호한 부분이 있습니다. ARM의 크로스 컴파일러는 일반적으로 호출 시 일부 부분을 생략합니다. 예를 들어 ARM의 GCC(기본값은 v7), ACME의 Linux 배포판의 경우 gnueabi ABI를 사용하여 Glibc에 연결하도록 설정되어 있습니다. 지정되지 않은 ABI를 사용하여 Linux의 Glibc에 연결하도록 설정된 컴파일러를 나타냅니다. 대상 libc가 지정되지 않았습니다.VENDOR-SYSTEMarm-VENDOR-OS-LIBC-ABI-gccarm-acme-linux-gnu-gnueabi-gccarm-linux-gnu-gccarm-linux-gcc

관련 정보