Hallo,
ich versuche schon den ganzen Vormittag, nachdem ich unter Windows mit
EM-Blcoks erfolgreich ein C++ Projekt für den STM32F4 erstellt habe,
diese Quelldatein unter Linux mit dem arm-none-eabi-g++ zu übersetzen.
Reine C-Datein werden übersetzt, es kommt nur zu Problemen beim
einbinden der Standard-Header. Gibt es dafür eine spezielle Option,
damit er die C++ Standard-Bibliotheken verwendet?
Hier die Ausgabe der Konsole
$ arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-mthumb -ffunction-sections -fdata-sections -g -fno-rtti -fno-exceptions
test.cpp
test.cpp:2:18: fatal error: vector: No such file or directory
#include <vector>
^
compilation terminated.
Wäre dankbar falls jemand hier weis, was ich falsch mache.
Gruß
Daniel Eck schrieb:> Wäre dankbar falls jemand hier weis, was ich falsch mache.
Du rufst den C-Compiler "arm-none-eabi-gcc" auf. Rufe den C++ Compiler
auf mit "arm-none-eabi-g++".
Du übergibst außerdem kein Linkerscript und keine Startupcode-Datei. Das
Kompilat wirst du nicht sinnvoll nutzen können...
Zwei Linkerscripte? Sicher dass das richtig ist?
Welchen arm-none-eabi-g++ verwendest du? Mit dem von
https://launchpad.net/gcc-arm-embedded geht das, da wird die <vector>
Datei mitgeliefert.
[code
arm-none-eabi-g++ (GNU Tools for ARM Embedded Processors) 4.9.3 20141119
(release) [ARM/embedded-4_9-branch revision 218278]
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
[/code]
habe den Compiler über apt installiert (Ubuntu) , da ich mit dem
Download der einzelnen Dateien leider nichts zum laufen bekommen habe.
Gibt es da etwa Probleme mit dieser Version.
Zu <vector> -> Es gehen auch alle anderen Standard-Bibliotheken nicht,
diese sind entweder nicht aktiviert oder vielleicht auch nicht
installiert?? Mir fehlt da bisher noch etwas an Erfahrung, vielleicht
hatte ja jemand schon mal das gleiche Problem.
Danke schon mal.
Dani schrieb:> habe den Compiler über apt installiert (Ubuntu) , da ich mit dem> Download der einzelnen Dateien leider nichts zum laufen bekommen habe.
Die Linux-Version von https://launchpad.net/gcc-arm-embedded
funktioniert wunderbar unter Ubuntu und enthält alle Dateien der C++
Standard Library. Sie wird von vielen Projekten hier im Forum
erfolgreich verwendet. Falls du ein 64bit-Linux hast, musst du nur das
Paket "libc6:i386" installieren, damit das funktioniert.
Niklas Gürtler schrieb:> Falls du ein 64bit-Linux hast, musst du nur das> Paket "libc6:i386" installieren, damit das funktioniert.
Ach so. OK, dann werde ich mich da gleich mal dran machen.
Vielleicht kurz zur Erklärung, entpacken und die Files sind dann direkt
ausführbar? Hab da in dem Paket bisher keine Libs gesehen? Oder stellt
das Betriebssystem die std-libs?
Danke
Indem du die "PATH" Umgebungsvariable so setzt dass die das "bin"
Verzeichnis vom arm-none-eabi-gcc enthält, z.B. so:
Eine Datei ~/.profile anlegen, und hineinschreiben
1
source /etc/profile
2
export PATH=/pfad/zum/gcc-arm-embedded/bin:$PATH
Dann ausloggen und wieder einloggen oder neustarten.
Danke erstmal.
Habe mir jetzt das Paket von Launchpad geholt, habe es entpackt, die
PATH-Variable erweitert. Soweit funktioniert das auch. Nun bekomme ich
aber, wenn ich ein Test-Programm übersetzen möchte folgende Ausgabe:
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-exit.o): In function `exit':
3
exit.c:(.text.exit+0x16): undefined reference to `_exit'
4
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-abort.o): In function `abort':
5
abort.c:(.text.abort+0xa): undefined reference to `_exit'
6
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-fstatr.o): In function `_fstat_r':
7
fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'
8
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
9
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
10
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-signalr.o): In function `_kill_r':
11
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
12
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-signalr.o): In function `_getpid_r':
13
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
14
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-writer.o): In function `_write_r':
15
writer.c:(.text._write_r+0x10): undefined reference to `_write'
16
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-closer.o): In function `_close_r':
17
closer.c:(.text._close_r+0xc): undefined reference to `_close'
18
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-isattyr.o): In function `_isatty_r':
19
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
20
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-lseekr.o): In function `_lseek_r':
21
lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'
22
/home/sean/armToolchain/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7e-m/fpu/libc.a(lib_a-readr.o): In function `_read_r':
23
readr.c:(.text._read_r+0x10): undefined reference to `_read'
24
collect2: error: ld returned 1 exit status
Testprogramm ist dieses hier
1
#include<vector>
2
#include<iostream>
3
#include<deque>
4
5
usingnamespacestd;
6
7
classtest
8
{
9
public:
10
inttest;
11
public:
12
voidsetTest(inti){this->test=i;}
13
};
14
15
intmain(void)
16
{
17
test*obj=newtest;
18
obj->setTest(5);
19
cout<<"Test: "<<obj->test<<endl;
20
21
return0;
22
}
Weis jemand was ich da falsch mache?
Die Optionen habe ich mir hier aus dem Forum geholt
http://www.mikrocontroller.net/articles/ARM_GCC
Danke schon mal, komme leider hier einfach nicht weiter...
Wenn du die Standardausgabe verwendest, musst du dem Compiler auch
sagen, wohin die Ausgabe umgeleitet wird, z.B. auf eine UART. Dafür
musst du die Funktionen _write usw. implementieren.
Standardimplementierungen für _kill, _sbrk etc. holst du dir mit dem
Flag -specs=nosys.specs ins Haus.
Dani schrieb:> Vielleicht kurz zur Erklärung, entpacken und die Files sind dann direkt> ausführbar? Hab da in dem Paket bisher keine Libs gesehen? Oder stellt> das Betriebssystem die std-libs?
Installier doch einfach das Launchpad PPA ganz normal mit apt-get, warum
so umständlich?
Bernd K. schrieb:> Dani schrieb:>> Vielleicht kurz zur Erklärung, entpacken und die Files sind dann direkt>> ausführbar? Hab da in dem Paket bisher keine Libs gesehen? Oder stellt>> das Betriebssystem die std-libs?>> Installier doch einfach das Launchpad PPA ganz normal mit apt-get, warum> so umständlich?
Du meinst über die Ubuntu-Paketquellen?? Ich verstehe nicht ganz was du
meinst.
Daniel Eck schrieb:> Bernd K. schrieb:>> Dani schrieb:>>> Vielleicht kurz zur Erklärung, entpacken und die Files sind dann direkt>>> ausführbar? Hab da in dem Paket bisher keine Libs gesehen? Oder stellt>>> das Betriebssystem die std-libs?>>>> Installier doch einfach das Launchpad PPA ganz normal mit apt-get, warum>> so umständlich?>> Du meinst über die Ubuntu-Paketquellen?? Ich verstehe nicht ganz was du> meinst.
Ja. Wie bei jedem anderen PPA auch:
https://launchpad.net/gcc-arm-embedded> Pre-built GNU toolchain from ARM Cortex-M & Cortex-R processors> (Cortex-M0/M0+/M3/M4/M7, Cortex-R4/R5/R7).> [...]> For Ubuntu 10.04/12.04/13.04 32/64-bit user, PPA is available at> https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded.
Also folge dem Link im letzten Absatz: Füge das PPA das dort angegeben
ist als Paketquelle hinzu. Also so wie dort beschrieben, ich zitier mal
die obige Webseite:
1
Here are quick steps to install toolchain from this PPA on Ubuntu before 14.04: