Wie C++ Datein übersetzen mit arm-none-eabi-g++ (Kommandozeile)

#3967901
Lesenswert?

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ß
Gast #3968361
Lesenswert?

[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.
Persönliche Seite #3968367
Lesenswert?

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.
Gast #3968404
Lesenswert?

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
#3970625
Lesenswert?

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...
#3987804
Lesenswert?

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.
#3989343
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren