나중에 이것을 찾는 사람을 위해 편집하십시오. 현재 내가 이해하고 있는 것은 "해당 파일이나 디렉토리가 없습니다"는 오해의 소지가 있다는 것입니다. elf가 있는 경우 chmod a+x 및 ./programname.elf로 실행할 수 있습니다. 내 시스템에서 실패한 이유는 아마도 elf가 동적으로 링크된 실행 파일이 있다는 뜻일 것입니다(이 경우에도 그렇습니다). 제가 사용하는 SDK는 동적으로 링크되어 있기 때문에 SDK에서 사용하는 3rd party 함수의 소스코드는 elf에 내장되어 있지 않습니다. 동적으로 링크된 실행 파일은 런타임에 필요한 모든 포함을 찾고, 정적으로 링크된 실행 파일은 컴파일 타임에 필요한 모든 코드를 바이너리에 작성합니다. 내 문제에 대한 해결책은 SDK가 내 프로그램을 정적으로 컴파일하도록 만드는 방법을 알아내거나, 필요한 관련 기능이 포함된 정적 링크 라이브러리를 만들고 이를 사용하여 내 대상 플랫폼에서 기본적으로 프로그램을 빌드하는 방법을 알아내는 것 같습니다. 프로그램.
bash./program.elf를 사용하여 elf를 실행하려고 시도했지만 "바이너리 파일을 실행할 수 없습니다"라는 응답을 받았습니다.
program.elf 파일을 실행하면 다음과 같은 결과가 나옵니다.
file.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1(SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
uname -a를 실행하면
Linux analog 3.19.0-g7f929ec #1 SMP PREEMPT Thu Sep 3 18:06:48 EEST 2015 armv71 armv71 armv71 GNU/Linux
다들 ARM이라고 하는데 이 프로그램은 왜 작동하지 않는 걸까요?
누군가의 제안에 따라 여기에 readelf-A ./program.elf가 있습니다.
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_FP_arch: VFPv3
Tag_Advanced_SIMD_arch: NEONv1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_rounding: Needed
Tag_ABI_FP_denomal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
답변1
내가 아는 한, ARMv7 프로세서는 ARMv7-A 모델(각각 Galaxy S4 및 Nexus 5의 Snapdragon 600/800 및 Raspberry Pi 2/Model B에 사용되는 모델)로 더 일반적으로 알려져 있지만 출력은 이 칩은 ARMv71(ARMv7 개정 1이라고도 함)로 표시됩니다. 프로그램을 컴파일/빌드할 때 선택한 ARMv7 프로세서 SDK의 변형이 ARMv7-A용으로 빌드하려고 했지만 대신 ARMv7-M용으로 빌드한 방법과 유사한 ARMv7의 잘못된 하위 집합일 가능성이 충분히 있는 것 같습니다. 이제 이것은 귀하가 어떤 프로세서/장치를 구축하고 있는지 또는 해당 문제를 위해 구축하고 있는지 모르기 때문에 추측일 뿐입니다. 그러나 특별히 컴파일되지 않은 프로그램을 실행할 때 SoC 프로세서가 얼마나 까다로운지를 고려하면 다음을 컴파일하는 것이 좋습니다. 소스 코드는 가능하다면 문제의 컴퓨터에 직접 있습니다.
답변2
이 명령은 bash ./program.elf
bash 인터프리터를 통해 파일을 보냅니다.
elf 파일은 다음과 같이 명령줄에서 실행되어야 하는 컴파일된 바이너리입니다../program.elf
다음을 사용하여 파일의 실행 가능 비트를 설정하는 것을 잊지 마십시오.
chmod a+x ./program.elf