Почему arm-linux-gnueabi-g ++ - 4.4 всегда создает двоичный файл «7-A»?

Я использую Ubuntu 12: 04LTS и установил компилятор arm-linux-gnueabi C и C ++. Скомпилированный бинарный файл выигралбеги на моей целевой доске. Похоже, даже если я укажу cpu и arch, компилятор все равно создаст двоичный файл для неправильного процессора. Вместо atm9tdmi его строят и 7-A.

Я делаю что-то не так или мне нужно что-то настроить? Благодарю.

~/ArmTest$ arm-linux-gnueabi-g++-4.4 -mcpu=arm9tdmi -march=armv4t -O main.cpp -o CPPTest

~/ArmTest$ readelf -A CPPTest 
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
~/ArmTest$ file CPPTest 
CPPTest: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0xf8e81f7a1bb3ee1200cb3dd1aa5b192ecc6de831, not stripped

 uname -a
Linux Desktop 3.2.0-32-generic-pae #51-Ubuntu SMP Wed Sep 26 21:54:23 UTC 2012 i686 athlon i386 GNU/Linux

:~/ArmTest$ arm-linux-gnueabi-g++-4.4 -v
Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.7-1ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.4.7 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv7-a --with-float=softfp --with-fpu=vfpv3-d16 --with-mode=thumb --disable-werror --enable-checking=release --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --build=i686-linux-gnu --host=i686-linux-gnu --target=arm-linux-gnueabi --with-headers=/usr/arm-linux-gnueabi/include --with-libs=/usr/arm-linux-gnueabi/lib
Thread model: posix
gcc version 4.4.7 (Ubuntu/Linaro 4.4.7-1ubuntu2) 

:~/ArmTest$ cat main.cpp
#include

using namespace std;

int main(){
   cout

Ответы на вопрос(2)

Настраивается с ; линия для вашегоarm-linux-gnueabi-g++-4.4 ясно говорится, что компилятор был создан не для arm9, а для ARMv7, то есть ARM Cortex Axe (хотяне хватаетInterwork опция для смешанного кода ARM / Thumb или код Thumb2):

Configured with: ... --with-arch=armv7-a --with-float=softfp --with-fpu=vfpv3-d16 --with-mode=thumb ...

Возможно, вам нужен другой компилятор, созданный как неопределенный ARM.

Рассмотреть возможность использованияBuildRoot создать полный набор инструментов для вашего проекта.

Или загрузите набор инструментов gcc-4.0 или 4.1 сgnuarm.com

 Jim23 окт. 2012 г., 15:15
@unixsmurf означает ли это, что есть способ изменить поведение по умолчанию с помощью упакованного компоновщика .deb? если так как?
 unixsmurf19 окт. 2012 г., 19:13
Эти параметры конфигурации влияют только на то, какой код компилятор генерирует по умолчанию, а не на тот код, который может генерировать компилятор.
 sawdust19 окт. 2012 г., 00:31
По умолчанию компилятор также выполняет Thumb (16-битные, а не 32-битные) инструкции, хотя некоторые процессоры arm9 могут справиться с любым из них.
 unixsmurf23 окт. 2012 г., 20:19
@Jim: Технически, да, не связываясь с библиотеками по умолчанию. Практически нет, если только выперестраивать автономный образ, такой как ядро Linux. Но мой комментарий был более конкретным, что компилятор не имеет к этому никакого отношения - компоновщик всегда должен "содействовать» изображение с наименьшим общим знаменателем включенных объектных файлов - включая системные библиотеки. Ключевой информацией из команды gcc -v не является "--with-арка», но "--with-ЛИЭС».
 Jim18 окт. 2012 г., 23:51
Это то, что я понял, но я хотел убедиться, что я непросто глупость У меня также были проблемы с crosstool-ng, как видно здесьstackoverflow.com/questions/12957977/...
Решение Вопроса

проблема в том, что ваш компоновщик должен связать ваш объектный файл с другими файлами, такими как libc, crt.o, чтобы создать исполняемый файл. Однако в вашем наборе инструментов все эти файлы были скомпилированы для 7-A, таким образом, исполняемый файл в итоге также становится единым целым. Это проблема с кросс-цепочками Ubuntu, по умолчанию это armv7a.

если тыпросто скомпилировать ваш исходный файл, выПосмотрим, что компилятор выводит правильный тип объектного файла.

$ arm-linux-gnueabi-g ++ - 4.4 -mcpu = arm9tdmi -march = armv4t -O main.cpp -o CPPTest

$ readelf -A CPPTest
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "ARM9TDMI"
  Tag_CPU_arch: v4T
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  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_ABI_optimization_goals: Prefer Speed
  Tag_DIV_use: Not allowed

Таким образом, набор инструментов - это больше, чем компилятор, и каждый его компонент должен играть вместе.

 limovala22 мая 2013 г., 07:22
Так как связать после просто компиляции ??
 auselen22 мая 2013 г., 08:45
@AbhishekLal что ты хочешь делать?
 Jim19 окт. 2012 г., 01:30
Ах, хорошая мысль. Спасибо за это понимание.
 unixsmurf19 окт. 2012 г., 17:30
Этот ответ является правильным, тот, который отмечен как принятый, немного вводит в заблуждение.
 Hi-Angel04 июл. 2014 г., 17:51
@limovala, кажется, вам нужно перестроить библиотеки для архитектуры, которую вы хотите. На первый взгляд это может показаться страшным, ноBuildroot идет за помощью! Вам просто нужно выбрать точные библиотеки, которые вы хотите через симпатичный графический интерфейс, и выполнить командуmake, Спросите, нужна ли вам помощь (мне плохо с buildroot, но, по крайней мере, я наконец-то получил ее на работу, так что 'я могу помочь).

Ваш ответ на вопрос