Forum: Compiler & IDEs AVR32 - C++ kompilieren / findet Header nicht


von Uwe D. (Gast)


Lesenswert?

Hallo Leute,

ich habe unter meinem Ubuntu 9.10 ein C/C++-Programm programmiert um 
damit auf die serielle Schnittstelle zu zugreifen, funktioniert 
wunderbar. Nun wollte ich dieses Programm auf meinen neuen NGW100 zum 
laufen bringen.

Da ich für den seriellen Zugriff auf die Schnittstelle POSIX benutze, 
habe ich termios.h und ioctl.h als Header-Files eingebunden.

Nun meine Probleme/Frage:

1. Die beiden speziellen Header-Files werden beim cross-compilieren 
nicht gefunden (alle anderen scheinbar schon), wie muss ich vorgehen.

2. Wenn ich mit avr32-g++ kompiliere, bin ich mir unsicher ob hier die 
Standard-Optionen ausreichen (avr32-g++ file.cpp -o file), habe zwar 
schon andere Varianten probiert, aber gleiche in grün. Bei Google finde 
ich immer nur Anleitungen zu gcc (ging auch nich).


Ich nutze:

Ubuntu 9.10
AVR32-Toolchain 2.4.2 für Ubuntu 9.10


Hier nochmal meine Fehlermeldung vom Compiler:

In file included from dd_npb190.cpp:7:
/usr/lib/gcc/avr32/4.3.2/../../../../avr32/include/termios.h:4:25: 
error: sys/termios.h: No such file or directory
dd_npb190.cpp:9:23: error: sys/ioctl.h: No such file or directory
dd_npb190.cpp: In function 'int main()':
dd_npb190.cpp:62: error: 'select' was not declared in this scope
dd_npb190.cpp: In function 'int open_input_source(int)':
dd_npb190.cpp:237: error: aggregate 'termios options' has incomplete 
type and cannot be defined
dd_npb190.cpp:259: error: 'O_NDELAY' was not declared in this scope
dd_npb190.cpp:280: error: 'tcgetattr' was not declared in this scope
dd_npb190.cpp:292: error: 'B9600' was not declared in this scope
dd_npb190.cpp:292: error: 'cfsetspeed' was not declared in this scope
dd_npb190.cpp:293: error: 'PARENB' was not declared in this scope
dd_npb190.cpp:294: error: 'CSTOPB' was not declared in this scope
dd_npb190.cpp:295: error: 'CSIZE' was not declared in this scope
dd_npb190.cpp:296: error: 'CS8' was not declared in this scope
dd_npb190.cpp:297: error: 'CLOCAL' was not declared in this scope
dd_npb190.cpp:297: error: 'CREAD' was not declared in this scope
dd_npb190.cpp:298: error: 'ICANON' was not declared in this scope
dd_npb190.cpp:298: error: 'ECHO' was not declared in this scope
dd_npb190.cpp:298: error: 'ECHOE' was not declared in this scope
dd_npb190.cpp:298: error: 'ISIG' was not declared in this scope
dd_npb190.cpp:300: error: 'OPOST' was not declared in this scope
dd_npb190.cpp:301: error: 'VMIN' was not declared in this scope
dd_npb190.cpp:302: error: 'VTIME' was not declared in this scope
dd_npb190.cpp:305: error: 'TCIOFLUSH' was not declared in this scope
dd_npb190.cpp:305: error: 'tcflush' was not declared in this scope
dd_npb190.cpp:307: error: 'TCSAFLUSH' was not declared in this scope
dd_npb190.cpp:307: error: 'tcsetattr' was not declared in this scope


Wäre super wenn mir jemand weiterhelfen könnte.

Vielen Dank schonmal!

Gruß Uwe

von mork (Gast)


Lesenswert?

Uwe D wrote:
>2. Wenn ich mit avr32-g++ kompiliere, bin ich mir unsicher ob hier die
>Standard-Optionen ausreichen (avr32-g++ file.cpp -o file), habe zwar
>schon andere Varianten probiert, aber gleiche in grün. Bei Google finde
>ich immer nur Anleitungen zu gcc (ging auch nich).

Du musst mit dem avr32-linux-g++ compilieren. Der avr32-g++ ist für 
stand-alone Anwendungen gedacht.

MfG Mork

von Uwe D. (Gast)


Lesenswert?

Danke schonmal,

bei mir gibt es aber keine avr32-linux-g++, habe alle deb-Pakete vom 
Atmel-Server (http://distribute.atmel.no/tools/avr32/release/ubuntu/) 
mit apt-get installiert.

von Mark .. (mork)


Lesenswert?

Den Linux-Crosscompiler gibts AFAIK überhaupt nicht als fertige binaries 
(wegen Bugs oder so), d.h. man muss ihn selbst compilieren.

Beim Buildroot für die AVR32 (http://www.atmel.no/buildroot/) ist der 
Linux-Compiler dabei, versuchs mal damit.

MfG Mark

von Uwe D. (Gast)


Lesenswert?

Hallo,

habe nun das buildroot-2.3.0 unter Ubuntu 8.04 erfolgreich kompiliert, 
dann mit

avr32-linux-g++ test.cpp -o test

meinen Quellcode erfolgreich ohne Fehlermeldung kompiliert!


Wenn ich jetzt aber mein Programm direkt unter dem AVR32 NGW100 (auch 
buildroot-2.3.0 von SD-Karte) mit ./test im Hauptverzeichnis / ausführe, 
erhalte ich folgende Fehlermeldung:

./test: can't load library 'libstdc++.so.6'

Liegt das am cross-compilieren oder muss ich was bei dem buildroot auf 
dem NGW100 ändern?


Vielen Danke & Gruß
Uwe

von Uwe D. (Gast)


Lesenswert?

Habe jetzt mal aus "buildroot-avr32-v2.3.0/build_avr32/staging_dir/lib" 
die Datei "libstdc++.so.6.0.9" auf meine SD-Karte auf der ich mein 
Buildroot-2.3.0 für den NGW100 habe nach "/lib/libstdc++.so.6" kopiert.


Jetzt taucht der oben genannte Fehler zwar nicht mehr auf, bekomme aber 
sofort ein "Segmentation fault".


Kann mir beim kompilieren jemand weiterhelfen, da ich das Progrämm'chen 
für meine Abschlussarbet benötige, wäre super?


Danke & Gruß
Uwe

von Hc Z. (mizch)


Lesenswert?

Vorab:  Ich kenne das Linux auf AVR32 nicht.  Aber versuch mal, Dein 
Programm mit -static zu kompilieren.  Es wird dadurch zwar (u.U. sehr 
deutlich) größer, aber Du schließt Probleme mit inkompatiblen Libraries 
aus.

von Uwe D. (Gast)


Lesenswert?

Danke dir,

durch das kopieren der libstc++ wurde das Problem ja gelöst, mein neuer 
Fehler "Segmentation fault" liegt definitiv am Quelltext, kommt auch 
wenn ich mit -static kompiliere.

Dazu werde ich aber einen neuen Thread aufmachen, passt hiert nämlich 
überhaupt nicht rein.

Danke nochmal an alle.

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.