Arm

ARM 和 armv71 有什麼區別?

  • July 13, 2016

為將來查找此內容的人編輯:我現在的理解是“沒有這樣的文件或目錄”具有誤導性。如果你有一個精靈,你可以通過 chmod a+x 和 ./programname.elf 來執行它。它在我的系統上失敗的原因是 elf 可能意味著(並且在這種情況下確實如此),你有一個動態連結的執行檔。因為我使用的SDK是動態連結的,所以在elf中沒有內置SDK使用的第3方功能的源碼。動態連結的執行檔在執行時僅查找所有必需的包含,靜態連結的執行檔在編譯時將所有必需的程式碼寫入二進製文件。我的問題的解決方案似乎是弄清楚如何使 SDK 靜態編譯我的程序,

我嘗試使用 bash./program.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

該命令bash ./program.elf將通過 bash 解釋器發送文件。

elf 文件是編譯後的二進製文件,應該像這樣從命令行執行:./program.elf

不要忘記為文件設置可執行位:

chmod a+x ./program.elf

據我所知,ARMv7 處理器更常見的是 ARMv7-A 型號(分別用於 Galaxy S4 和 Nexus 5 中的 Snapdragon 600/800 以及 Raspberry Pi 2/型號 B ),但是您的輸出將系統晶片列為 ARMv71(又名 ARMv7 修訂版 1)。您在編譯/建構程序時選擇的 ARMv7 處理器 SDK 的變體似乎完全有可能只是 ARMv7 的錯誤子集,類似於如果您打算為 ARMv7-A 建構而不是為 ARMv7-M 建構。現在這只是一個猜測,因為我不知道您正在建構什麼處理器/設備,或者為此建構什麼,但考慮到 SoC 處理器在執行不是專門為它們編譯的程序時是多麼挑剔,我建議編譯原始碼如果可能,直接在有問題的機器上。

引用自:https://unix.stackexchange.com/questions/295449