Я понимаю, что многие проблемы компиляции в Pi Zeros связаны с тем, что они используют armv6, в то время как более новые Raspberry Pi, такие как 3 A + и B +, используют armv7. Однако я не понимаю, как найти нарушающую библиотеку в приложении, которое вызывает проблему, и, возможно, есть простое решение проблемы.
Фон:
Я пытаюсь перенести приложение из среды рабочего стола Linux на Pi Zero (работает armv6). Я успешно портировал его на Pi 3 B и B +. То есть я скомпилировал код и проверил, что он выдает правильный вывод.
Однако реализация Pi Zero компилируется, но при запуске выдает только одно сообщение:
Illegal instruction
Это наиболее вероятно из-за какой-то команды, которая не совместима с armv6, но я не могу понять, какая это команда. Я хотел бы начать с определения, какая библиотека является проблемным ребенком. Пожалуйста, скажите мне, как бы я это диагностировал.
Дополнительная информация:
Я проверил, что проблема не в компиляторе. Как? Я сделал простую программу hello world и скомпилировал ее для Pi Zero:
#include<iostream>
int main(int argc, char *argv[]){
std::cout << "Hello World!" << std::endl;
return 0;
}
Так что сам компилятор, похоже, не является проблемой.
Подробнее:
Если я запускаю readelf -A myapp
, я понимаю, что вывод сообщает, что приложение действительно скомпилировано для armv6:
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "6"
Tag_CPU_arch: v6
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_FP_arch: VFPv2
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_rounding: Needed
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_VFP_args: VFP registers
Tag_CPU_unaligned_access: v6
Вот readelf -A
для одной из общих библиотек:
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "6"
Tag_CPU_arch: v6
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_FP_arch: VFPv4
Tag_Advanced_SIMD_arch: NEONv1 with Fused-MAC
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: Deprecated
Tag_ABI_VFP_args: VFP registers
Tag_CPU_unaligned_access: v6