내 x86 Ubuntu12.04 Linux에 ARM 크로스 컴파일러 툴 체인을 설치했습니다.ARM 크로스 컴파일
이제 arm-linux-gnueabi-gcc 크로스 컴파일러가 있습니다.
#include <stdio.h>
int main(){
printf("hello world\n");
return 0;
}
를 따라 내가
의 결과 -static
팔 - 리눅스 - gnueabi-GCC -OA 교류를 사용하여이 프로그램을 컴파일 교차으로
나는 간단한 인사 세계 프로그램을 코딩 한 컴파일 된 바이너리는 다음과 같습니다.
$ 파일 a a : ELF 32 비트 LSB 실행 파일, 정적으로 줄이 바뀐 ARM, 버전 1 (SYSV), GNU/Linux 용 내가 QEMU 내 ARM의 데비안 리눅스에서이 바이너리를 실행하면 2.6.31은, 그것은 '잘못된 명령'
라고하지만
을 제거하지 내 ARM의 데비안 리눅스에 GCC와 같은 소스 코드를 컴파일하는 경우, 그것을 잘 실행됩니다.
두 바이너리의 파일 결과는 같습니다. 내 상호 컴파일 된 ARM 바이너리에 어떤 문제가 있습니까?
미리 감사드립니다.
[email protected]:/var/www$ arm-linux-gnueabi-readelf --file-header --arch-specific a
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x8881
Start of program headers: 52 (bytes into file)
Start of section headers: 368052 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 30
Section header string table index: 27
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "7-A"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv3-D16
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_CPU_unaligned_access: v6
Tag_DIV_use: Not allowed
제 크로스 컴파일러가 ARMv7 바이너리를 maded했지만 제 QEMU가 ARMv5를 에뮬레이트하고 있다고 생각합니다. 도움을 주셔서 감사합니다! – daehee
크로스 컴파일 된 이진 버전을 ARMv5로 변경하는 방법 또는 QEMU로 ARMv7 CPU를 에뮬레이트하는 방법을 알려주시겠습니까 ?? 또는 일부 문서를 참조하십시오. – daehee
armv5를 타겟으로하고 싶다면 툴체인이 멀티 링크를 지원하지 않는 한 다른 툴체인을 사용해야합니다. –