Forum: Compiler & IDEs arm-elf-gcc und arm-linux-gnueabi-gcc


von Paul E. (paul_e)


Lesenswert?

Hallo,
kann mir jemand erklären was der Unterschied zwischen beiden ist und ob 
ich mein HalloWelt Beispiel, welches mit arm-linux-gnueabi-gcc 
funktioniert auch mit dem arm-elf-gcc bauen kann?

Danke

Das z.B. bau ich unter Ubuntu 12.04 (x86) und funktiniert bzw. läuft 
dann auf dem Arm-Cortex A9:
arm-linux-gnueabi-gcc -o helloworld helloworld.c

http://zedboard.org/content/zedboard-setting-arm-development-environment-linux

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

arm-elf-* benutzt ein API, welches meiner Kenntnis nach mittlerweile
als veraltet gilt.  Aktuell sollte man nur noch arm-*-eabi-*
benutzen.

von Mano W. (Firma: ---) (manow)


Lesenswert?

Jörg Wunsch schrieb:
> arm-elf-* benutzt ein API, welches meiner Kenntnis nach ...

Heißt das nicht ABI - Application Binary Interface?

http://en.wikipedia.org/wiki/Application_binary_interface

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mano Wee schrieb:
> Heißt das nicht ABI - Application Binary Interface?

Ja, klar.

von Paul E. (paul_e)


Lesenswert?

Kann ich das trotz das es veratlet ist mit dem arm-elf-gcc bauen und 
wenn ja welche optionen muss ich angeben?
Danke

P.S. in meinem arm-linux-gnueabi-gcc fehlt irgendwie die ranlib, 
weswegen ich den arm-elf-gcc versuchen wollte

von Hans Ulli K. (Gast)


Lesenswert?

Paul E. schrieb:
> Kann ich das trotz das es veratlet ist mit dem arm-elf-gcc bauen und
> wenn ja welche optionen muss ich angeben?
> Danke

Wenn du mal auf
http://wiki.debian.org/ArmEabiPort
nachsehen würdest ist dieses OABI (Old ABI) und EABI (Embedded ABI) noch 
ein wenig komplexer ...

Laut deren Seite sollte es mit
-mabi=aapcs-linux -mfloat-abi=soft -meabi=4
laufen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul E. schrieb:
> in meinem arm-linux-gnueabi-gcc fehlt irgendwie die ranlib

Dann sieh doch zu, dass du die aktuelle Toolchain komplett bekommst,
statt die Flucht nach hinten anzutreten.

von Paul E. (paul_e)


Lesenswert?

Einen Tipp wo ich die komplette Toolchain herbekomme? Den Kompiler 
selbst habe ich unter Ubuntu mit sudo apt-get install 
gcc-arm-linux-gnueabi bekommen.

Wohingegen ich den arm-elf-gcc komplett nach Anleitung gebaut habe:
http://wiki.ubuntuusers.de/GNU_ARM-Toolchain

Danke

von Dr. Sommer (Gast)


Lesenswert?

Für embedded ("bare metal"):
https://launchpad.net/gcc-arm-embedded

von Hans Ulli K. (Gast)


Lesenswert?

Ich kenne ja Ubuntu nicht aber ....

Siehe hier
http://packages.ubuntu.com/search?lang=de&keywords=binutils&searchon=names

Entweder
binutils-arm-linux-gnueabi
oder
binutils-arm-linux-gnueabihf

ersterer ist SoftFloat und letzterer ist HardFloat

zum gcc hier
http://packages.ubuntu.com/search?suite=default&section=all&arch=any&lang=de&keywords=gcc&searchon=names

Normalerweise sollt apt-get das aufdröseln, wenn du den gcc für ARM 
haben willst.
ggf. solltest du das/die Paket(e) neu installieren.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul E. schrieb:
> Einen Tipp wo ich die komplette Toolchain herbekomme?

Kann man sich auch selbst bauen.  Ist unter Linux nicht extrem
schwierig.

von Paul E. (paul_e)


Lesenswert?

Mhh meine Arm-Toolchain scheint zu funktionieren, das Ranlib wird aber 
scheinbar vom Host-Compiler vermisst:

checking for i686-pc-linux-gnu-ranlib... no
checking for ranlib... ranlib
configure: error: "sorry...compiler not supported"

Das ist ein Teil des Configure scripts, zu dem der Libary die ich Cross 
Compelieren möchte, als Host habe ich i868-linux-gnu gewählt, dessen 
ranlib er nicht findet. Wenn jemand eine Idee hat wäre ich dankbar.

von Hans Ulli K. (Gast)


Lesenswert?

ranlib ist Teil der binutils.
Das sollte auch auf deinem Host vorhanden sein, ggf ist irgendwie mal 
ein Symlink verloren gegangen ...

Tippe mal
i686-pc-linux-gnu-
und drücke in der Shell die TAB-Taste (Bash-Completion)
dann sollte in etwa so was auftauchen
1
elektroman@X200s ~ $ i686-pc-linux-uclibc-
2
i686-pc-linux-uclibc-addr2line   i686-pc-linux-uclibc-gprof
3
i686-pc-linux-uclibc-ar          i686-pc-linux-uclibc-ld
4
i686-pc-linux-uclibc-as          i686-pc-linux-uclibc-ld.bfd
5
i686-pc-linux-uclibc-c++filt     i686-pc-linux-uclibc-ldconfig
6
i686-pc-linux-uclibc-cpp         i686-pc-linux-uclibc-ldd
7
i686-pc-linux-uclibc-cpp-4.7.2   i686-pc-linux-uclibc-ld.gold
8
i686-pc-linux-uclibc-elfedit     i686-pc-linux-uclibc-nm
9
i686-pc-linux-uclibc-emerge      i686-pc-linux-uclibc-objcopy
10
i686-pc-linux-uclibc-fix-root    i686-pc-linux-uclibc-objdump
11
i686-pc-linux-uclibc-gcc         i686-pc-linux-uclibc-pkg-config
12
i686-pc-linux-uclibc-gcc-4.7.2   i686-pc-linux-uclibc-ranlib
13
i686-pc-linux-uclibc-gcc-ar      i686-pc-linux-uclibc-readelf
14
i686-pc-linux-uclibc-gcc-nm      i686-pc-linux-uclibc-size
15
i686-pc-linux-uclibc-gcc-ranlib  i686-pc-linux-uclibc-strings
16
i686-pc-linux-uclibc-gcov        i686-pc-linux-uclibc-strip
17
i686-pc-linux-uclibc-gcov-4.7.2
Bei logischerweise alles mit dem
i686-pc-lunux-gnu-
prefix

von Paul E. (paul_e)


Lesenswert?

Bei mir kommt da nicht annähernd so viel und auch nur wenn ich pc weg 
lasse. Das passiert in beiden virtuellen Ubuntus 12.04 und 11.04
1
VM@VM-VirtualBox:~$ i686-linux-gnu-
2
i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
3
i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5

Gehören die Standartmässig zu Linux/Ubuntu oder hätte ich die irgendwann 
mal installieren müssen.

P.S. die Bashcomplition funktionioert bei andern Sachen wie z.B. 
arm-linux ... einwandfrei

von Hans Ulli K. (Gast)


Lesenswert?

Paul E. schrieb:
> Bei mir kommt da nicht annähernd so viel und auch nur wenn ich pc weg
> lasse. Das passiert in beiden virtuellen Ubuntus 12.04 und 11.04
>
1
> VM@VM-VirtualBox:~$ i686-linux-gnu-
2
> i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
3
> i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5
4
>
>
> Gehören die Standartmässig zu Linux/Ubuntu oder hätte ich die irgendwann
> mal installieren müssen.
>
> P.S. die Bashcomplition funktionioert bei andern Sachen wie z.B.
> arm-linux ... einwandfrei

Soviel ich weiss ist gcc, binutils, make und linux-headers nicht in 
Ubuntu als default installiert (komme von Gentoo)
1
apt-get install gcc bintuils make linux-headers
sollt reichen.

Es dürfte dann fast alles vorhanden sein.
*-emerge
ist Gentoo spezifisch ..

von Paul E. (paul_e)


Lesenswert?

Danke, die scheinen alle installiert zu sein:
1
gcc is already the newest version.
2
make is already the newest version.
3
binutils is already the newest version.
4
linux-headers-2.6.38-8-generic is already the newest version.

Hab für die header den folgende Zeile genutzt und den kleinen 
Buchstabendreher in binutils verändert:
1
sudo apt-get install linux-headers-$(uname -r)
2
sudo apt-get install binutils

Ausgabe von i686 ist immer noch:
1
VM@VM-VirtualBox:~$ i686-linux-gnu-
2
i686-linux-gnu-cpp      i686-linux-gnu-g++      i686-linux-gnu-gcc
3
i686-linux-gnu-cpp-4.5  i686-linux-gnu-g++-4.5  i686-linux-gnu-gcc-4.5

Andere Ideen?

von Hans Ulli K. (Gast)


Lesenswert?

Hmm seltsam (aber noch nicht ganz)

Was hast du denn für eine Config
1
cat /proc/cpuinfo
2
uname -a

Wie sieht es denn aus mit der bash completion  bei
1
x86_64-pc-linux-gnu-
aus.

nicht das du einen 64bit ?? VirtualPC hast und deine Toolchain nur 32bit 
(i686) ist.
Sowas hatte ich schon mal wo ich von einem 64bit System in ein 32bit 
System chroot'ed habe. configure erkannte mein 64bit Host und flog bei 
dem 32bit Compiler auf die Fresse.
Ein
{code]
linux32 chroot
[/code]
war hier die Lösung.

von Paul E. (paul_e)


Lesenswert?

Danke schon mal für deine Umfangreichen Bemühungen.

Hier die Ausgabe
1
VM@VM-VirtualBox:~$ uname -a
2
Linux systemc-VirtualBox 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux
3
4
VM@VM-VirtualBox:~$ cat /proc/cpuinfo
5
processor  : 0
6
vendor_id  : GenuineIntel
7
cpu family  : 6
8
model    : 23
9
model name  : Intel(R) Core(TM)2 Duo CPU     P9500  @ 2.53GHz
10
stepping  : 10
11
cpu MHz    : 2428.984
12
cache size  : 6144 KB
13
fdiv_bug  : no
14
hlt_bug    : no
15
f00f_bug  : no
16
coma_bug  : no
17
fpu    : yes
18
fpu_exception  : yes
19
cpuid level  : 5
20
wp    : yes
21
flags    : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm constant_tsc up pni monitor ssse3 lahf_lm
22
bogomips  : 4857.96
23
clflush size  : 64
24
cache_alignment  : 64
25
address sizes  : 36 bits physical, 48 bits virtual
26
power management:

Bashcomplition für x86_64 liefert nichts.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1
% dpkg-query -L binutils | fgrep bin/
2
/usr/bin/addr2line
3
/usr/bin/ar
4
/usr/bin/strings
5
/usr/bin/readelf
6
/usr/bin/size
7
/usr/bin/gprof
8
/usr/bin/objcopy
9
/usr/bin/ld.gold
10
/usr/bin/c++filt
11
/usr/bin/ld.bfd
12
/usr/bin/as
13
/usr/bin/objdump
14
/usr/bin/nm
15
/usr/bin/elfedit
16
/usr/bin/strip
17
/usr/bin/ranlib
18
/usr/bin/ld
19
/usr/bin/gold

Ist ein Ubuntu 12.04.

von Paul E. (paul_e)


Lesenswert?

Sieht bei mir bis auf die Reihenfolge erst mal genauso aus, trotzdem 
findet der Compiler für den i868-pc-linux-gnu kein ranlib ?
1
VM@VM-VirtualBox:~$ dpkg-query -L binutils | fgrep bin/
2
/usr/bin/size
3
/usr/bin/objdump
4
/usr/bin/ar
5
/usr/bin/strings
6
/usr/bin/ranlib
7
/usr/bin/objcopy
8
/usr/bin/addr2line
9
/usr/bin/readelf
10
/usr/bin/elfedit
11
/usr/bin/nm
12
/usr/bin/strip
13
/usr/bin/c++filt
14
/usr/bin/as
15
/usr/bin/ld.gold
16
/usr/bin/gprof
17
/usr/bin/ld.bfd
18
/usr/bin/ld
19
/usr/bin/gold

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul E. schrieb:
> trotzdem
> findet der Compiler für den i868-pc-linux-gnu kein ranlib

Warum musst du auch den ganzen i686-pc-linux-gnu-Präfix da
durchschleifen?

Wenn ich hier "x86_64" eintippe (ist ein 64-bit-System) und dann
<TAB> drücke, findet er auch kein ranlib mit diesem Präfix.
Offenbar sind sich die Autoren der GCC- und Binutils-Pakete nicht
einig, ob man die Binaries nun auch noch zusätzlich mit dem
Präfixsalat installieren sollte oder nicht.

Vielleicht probier' ich's ja hier auch mal, die ARM-Toolchain
aufzusetzen.  Auf diesem Ubuntu habe ich derzeit noch keine (auf
CentOS und FreeBSD war's aber kein Problem).

von Hans Ulli K. (Gast)


Lesenswert?

Das mit den Prefixen ist teilweise ein Problem von configure, gcc und 
binutils.

Normalerweise dröselt das configure Script das alles aus, aber ...

bei mir ist z.B.
gcc ein Symlink auf  x86_64-pc-linux-gnu-gcc
Das geht aber auch Rückwarts

Folgendes als User root sollte eigentlich reichen
cd /usr/bin
for f in ar as ld nm objdump ranlib readelf size strings strip; do
    ln -s "$f" "i686-pc-linux-gnu-$f";
done

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.