mikrocontroller.net

Forum: Compiler & IDEs Allgemeine Fragen zur NEWLIB


Autor: Daniel Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich beschäftige mich seit kurzem mit der newlib.
Allerdings stellen sich mir noch einige Fragen:

1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe 
der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?

2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files 
müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht 
irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?

3) enthält YAGARTO eine reentrante Variante der NEWLIB?
Falls ja, wo ist diese zu finden?

4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen" 
("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der 
"lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?

5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks 
verwendet? Falls ja, wie?

Ich hoffe ihr könnt mir helfen :o)
Daniel

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar kann man unter Windows aalles selbst kopmilieren. Ich kann dir aber 
nicht sagen, ob cagwin zwingend ist. Unter OSX hab ich meinen gcc, der 
macht das für mich.

Warum willst du die Newlib mit Crossworks verwenden? Crossworks bringt 
seine eigene Library mit.

Autor: Daniel Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi "Gast",

um die NEWLIB-Sourcen mit der GCC zu bauen benötige ich aber ein 
MAKEFILE.
Das ist aber nicht Bestandteil der NEWLIB-Sourcen, sondern muss per
automake, autoconf, ... zunächst erstellt werden. Und da sehe ich 
momentan ein Problem unter Windows, wenn ich CYGWIN beiseite lassen 
will.

Bzgl. CrossWorks hast du Recht. CrossWorks bringt eigene Libs mit. 
Allerdings sind keine STDLIB-Fileoperationen (fopen, fclose, ...) 
enthalten ... und genau um diese geht es mir.
Aus verschiedenen Gründen benötige ich sie auch genau aus der STDLIB, so 
dass eigene Implementierungen ausscheiden.
(Zugriff auf verschiedene Massenspeicher (SDC, CF, ...) per 
STDLIB-Funktionen um bestehenden Code verwenden zu können).
Ausserdem ergibt sich bei CrossWorks das Problem, dass sich bzgl. der 
enthaltenen StartUp-Files "Unzulänglichkeiten" einstellen, sobald die 
üblichen INCLUDE- und LIB-Pfade "entfernt" und hin zu 
benutzerspezifischen verstellt werden.

Weitere Tips und Vorschläge?

Thnx :o)
Daniel

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Bauer wrote:

> Das ist aber nicht Bestandteil der NEWLIB-Sourcen, sondern muss per
> automake, autoconf, ... zunächst erstellt werden.

Nein, diese Boliden musst du nur auffahren, wenn du ein generisches
Paket bauen willst, das sich auf möglichst vielen Zielplattformen
compilieren lässt.

Wenn du ganz allein für dich was compilieren willst, brauchst du
ein Makefile von vielleicht 10 oder 20 Zeilen Länge.  Ein solches
lässt man sich nicht von automake anfertigen, sondern erzeugt es
mit dem Texteditor seiner Wahl.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Bauer wrote:
> Hi,
>
> ich beschäftige mich seit kurzem mit der newlib.
> Allerdings stellen sich mir noch einige Fragen:
>
> 1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe
> der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?
Kann nicht für YAGARTO sprechen. Es sollte aber im Prinzip mit einem 
vorhandenen Cross-Compiler funktionieren. Ich nutze für WinARM eine 
MinGW/msys-Umgebung in WinXP zum Bau aller Toolchain-Komponenten. Cygwin 
bisher gemieden, andere Cross-Toolchain Packager nutzen es aber.

> 2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files
> müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht
> irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?
Würde grundsätzlich davon absehen da irgenwas aus einer anderen 
"Umgebung" zu überschreiben. Lieber alles Konsistent lassen, evtl. in 
einer IDE eine andere toolchain-root eintragen bzw. System-Suchpfad 
anpassen. Grade bei den erwähnten Tools Crossworks und Yagarto düften 
die unterschiedlichen ABIs (EABI zu "old"-ABI) Verdrusspotential bergen.

> 3) enthält YAGARTO eine reentrante Variante der NEWLIB?
> Falls ja, wo ist diese zu finden?
Ältere Versionen auf jeden Fall nicht (war der Grund, warum ich nie auf 
Yagarto umgestiegen bin). Wollte der Yagarto-Packer jedoch umgestellen, 
bin aber nicht sicher, ob er das bereits bei der aktuellen Version 
gemacht wurde. Im Zweifel Michael Fischer per e-mail fragen oder im 
englischsprachigen Forum, dort antwortet Michael von Zeit zu Zeit.

> 4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen"
> ("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der
> "lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?
k.A. da Yagarto hier nicht im Einsatz. Zumindest in DevkitARM und WinARM 
gibt es keine default syscalls in der libc, sollte bei Codesourcery 
inzwischen auch so sein aber nicht sicher. Mglw. reicht es aber auch die 
Linker-Reihenfolge anzupassen, um eigene syscalls aus einer ".a"-Datei 
"unterzuschieben", habe das jedoch nicht selbst ausprobiert.

> 5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks
> verwendet? Falls ja, wie?
Hinter Crossworks steckt meines Wissens eine ARM-EABI Crosstoolchain, 
die auf Basis der von Codesourcery angepassten GNU Quellen 
zusammengebaut wurde. Allerdings ohne newlib, eigene libc von Rowley 
wurde ja bereits erwähnt. Statt viel zu basteln, ist es mglw. 
geschickter, CS G++ lite zu installieren und die IDE die darin 
enthaltenen tools (bintuils, compiler-frontend...) aufrufen zu lassen.

Autor: Daniel Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die (bisherigen :o) Antworten.
Dazu ein paar Kommentare/Anmerkungen:

>> 1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe
>> der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?
>Kann nicht für YAGARTO sprechen. Es sollte aber im Prinzip mit einem
>vorhandenen Cross-Compiler funktionieren. Ich nutze für WinARM eine
>MinGW/msys-Umgebung in WinXP zum Bau aller Toolchain-Komponenten. Cygwin
>bisher gemieden, andere Cross-Toolchain Packager nutzen es aber.

... werd ich mir mal ansehen. Allerdings hielt ich bisher MSYS für eine 
Art CYGWIN light und wollte eigentlich auch dieses vermeiden. Einzig 
"echte" Windowsanwendungen, BAT-Files, o.ä. wollte ich verwenden.

>> 2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files
>> müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht
>> irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?
>Würde grundsätzlich davon absehen da irgenwas aus einer anderen
>"Umgebung" zu überschreiben. Lieber alles Konsistent lassen, evtl. in
>einer IDE eine andere toolchain-root eintragen bzw. System-Suchpfad
>anpassen. Grade bei den erwähnten Tools Crossworks und Yagarto düften
>die unterschiedlichen ABIs (EABI zu "old"-ABI) Verdrusspotential bergen.

Selbstverständlich. Überschreiben wollte ich auch nichts. Eher eine 
händische Mischung von Includes und Libs im Projekt herstellen. An die 
ABIs hatte ich dabei noch gar nicht gedacht.

>> 3) enthält YAGARTO eine reentrante Variante der NEWLIB?
>> Falls ja, wo ist diese zu finden?
>Ältere Versionen auf jeden Fall nicht (war der Grund, warum ich nie auf
>Yagarto umgestiegen bin). Wollte der Yagarto-Packer jedoch umgestellen,
>bin aber nicht sicher, ob er das bereits bei der aktuellen Version
>gemacht wurde. Im Zweifel Michael Fischer per e-mail fragen oder im
>englischsprachigen Forum, dort antwortet Michael von Zeit zu Zeit.

... dann werd ich versuchen MiFi eine Antwort abzuringen :o)

>> 4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen"
>> ("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der
>> "lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?
>k.A. da Yagarto hier nicht im Einsatz. Zumindest in DevkitARM und WinARM
>gibt es keine default syscalls in der libc, sollte bei Codesourcery
>inzwischen auch so sein aber nicht sicher. Mglw. reicht es aber auch die
>Linker-Reihenfolge anzupassen, um eigene syscalls aus einer ".a"-Datei
>"unterzuschieben", habe das jedoch nicht selbst ausprobiert.

... "--allow-multiple-definition" hat in einem ersten Test funktioniert. 
Ob es Seiteneffekte gibt hab ich noch nicht herausfinden können.
Das Extrahieren von "lib-a_syscalls.o" aus der "libc.a" hab ich bereits 
getan; die neue "libc.a" allerdings noch nicht getestet.

>> 5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks
>> verwendet? Falls ja, wie?
>Hinter Crossworks steckt meines Wissens eine ARM-EABI Crosstoolchain,
>die auf Basis der von Codesourcery angepassten GNU Quellen
>zusammengebaut wurde. Allerdings ohne newlib, eigene libc von Rowley
>wurde ja bereits erwähnt. Statt viel zu basteln, ist es mglw.
>geschickter, CS G++ lite zu installieren und die IDE die darin
>enthaltenen tools (bintuils, compiler-frontend...) aufrufen zu lassen.

Mmh. CrossWorks an sich ist nicht schlecht ;o) Die "Unzulänglichkeit" 
der eigenen LIBC wollte ich durch die NEWLIB ausgleichen ... daher meine 
Fragen. Die Features von CS G++ hatte ich mir vor einiger Zeit auch 
schonmal angesehen. Aus verschiedenen Gründen bin ich dann aber doch bei 
CrossWorks gelandet. Werde aber erneut prüfen, welche Toolchain besser 
geeignet ist.

Vielen Dank,
Danny

PS: weitere Tips und Informationen nehme ich gern zur Kenntnis

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Bauer wrote:

> ... werd ich mir mal ansehen. Allerdings hielt ich bisher MSYS für eine
> Art CYGWIN light und wollte eigentlich auch dieses vermeiden. Einzig
> "echte" Windowsanwendungen, BAT-Files, o.ä. wollte ich verwenden.

MinGW/Msys stellt ein paar Unix-Werkzeuge als Win32-Compilate bereit,
einschließlich eines Compilers.  Während aber Cygwin eine Adaptierung
des Posix-APIs auf Win32 ist, sodass man viele Posix-Applikationen 1:1
compilieren kann (die Emulation erfolgt dann unterhalb, ähnlich
wie Wine in der umgekehrten Richtung), arbeitet der GCC von MinGW
rein auf dem Win32-API.  Im Ergebnis entsteht daher eine reine
Win32-Anwendung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.