Warum hat arm-linux-gnueabi-g++-4.4 immer bauen "7-Eine" binäre?
Ich bin mit Ubuntu 12:04LTS und installiert arm-linux-gnueabi-C-und C++ - compiler. Die kompilierte binary läuft nicht auf meinem target-board. Es sieht, auch wenn ich geben Sie die cpu und den Bogen, den compiler noch baut einen binären für die falsche CPU. Statt atm9tdmi es bauen-und-7-A.
Mache ich etwas falsch oder ist es etwas, das ich haben sollte konfiguriert? Danke.
~/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<iostream>
using namespace std;
int main(){
cout<<"Hello World"<<endl;
return 0;
}
InformationsquelleAutor Jim | 2012-10-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein compiler unterstützt armv4t, das problem ist Ihr linker hat die Anbindung der Objekt-Datei mit anderen Dateien wie libc, crt.o erstellen Sie eine ausführbare Datei. Aber in Ihrem toolchain alle Dateien, die kompiliert wurden, für 7-Ein, so ergeben ausführbare Datei endet als man als gut. Dies ist ein problem mit ubuntu cross-toolchains, Sie sind armv7a standardmäßig.
Wenn Sie einfach kompilieren Ihre Quell-Datei, Sie werden sehen, dass die compiler-Ausgänge rechts-Objekt-Datei-Typ.
So eine toolchain ist mehr als ein compiler und jede Komponente, die es braucht, um zu spielen zusammen.
make
. Fragen Sie, ob Sie Hilfe brauchen(ich bin schlecht mit dem buildroot, aber wenigstens habe ich es endlich geschafft zur Arbeit, also da kann ich helfen).Den "Konfiguriert" Zeile für Ihre
arm-linux-gnueabi-g++-4.4
klar, dass der compiler wurde nicht gebaut für arm9-aber ARMv7, also ARM-Cortex-Ax (obwohl es fehlt der interwork option für gemischte ARM/Thumb aka Thumb2-code):Möchten Sie wahrscheinlich einen anderen compiler gebaut als unbekannter ARM.
Erwägen Sie die Verwendung BuildRoot zu bauen, die eine komplette toolchain für Ihr Projekt aus.
Oder laden Sie sich die gcc-4.0 oder 4.1 toolchain aus gnuarm.com