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...
:
Bearbeitet durch User
Hallo, macht leider keinen Unterschied
1 | arm-none-eabi-g++ -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -ffunction-sections -fdata-sections -g -fno-rtti -fno-exceptions test.cpp -T stm32f407vg_sram.ld -T stm32f407vg_flash.ld |
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
Muss mich korriegieren, es ist alles im tar.gz file enthalten. Nur wie imlementiere ich das jetzt sauber in mein Ubuntu-System rein? 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:
1 | ~/ramdisk$ arm-none-eabi-g++ -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -ffunction-sections -fdata-sections -Os -flto -Wl,--gc-sections -static prog.cpp |
2 | /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 | using namespace std; |
6 | |
7 | class test |
8 | {
|
9 | public:
|
10 | int test; |
11 | public:
|
12 | void setTest(int i) { this->test = i;} |
13 | };
|
14 | |
15 | int main(void) |
16 | {
|
17 | test *obj = new test; |
18 | obj->setTest(5); |
19 | cout << "Test: " << obj->test << endl; |
20 | |
21 | return 0; |
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.
Super Danke, so funktioniert es jetzt:
1 | arm-none-eabi-g++ -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -ffunction-sections -fdata-sections -Os -flto -Wl,--gc-sections -static --specs=nosys.specs prog.cpp |
Jetzt geht es mal daran ein MakeFile zu bauen. Danke nochmals
:
Bearbeitet durch User
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: |
2 | |
3 | Step1: Inside Ubuntu, open a terminal and input |
4 | "sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded" |
5 | |
6 | Step2: Continue to input |
7 | "sudo apt-get update" |
8 | |
9 | Step3: Continue to input to install toolchain |
10 | "sudo apt-get install gcc-arm-none-eabi" |
11 | |
12 | [...] |
13 | |
14 | !!! If you are using Ubuntu 14.04 and later, please be careful because |
15 | there are packages with same name but produced by Debian and inherited by |
16 | Ubuntu. Simply follow the above 3 steps, you may end up with |
17 | gcc-arm-none-eabi from Ubuntu. So to install gcc-arm-none-eabi from ARM, |
18 | steps are: |
19 | 1). sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi |
20 | 2). sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded |
21 | 3). sudo apt-get update |
22 | 4). sudo apt-get install gcc-arm-none-eabi=4.9.3.2014q4-0trusty12 |
23 | or |
24 | sudo apt-get install gcc-arm-none-eabi=4.9.3.2014q4-0utopic12 |
25 | |
26 | Meanwhile we are working with Debian to consolidate and unify this toolchain. |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.