mikrocontroller.net

Forum: Compiler & IDEs compile mit gcc


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: derNeue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!
Ich bin gerade dabei ein Programm zu kompilieren mit gcc (auf Linux). 
Leider funktioniert das nicht, wie ich es gerne hätte, da immer folgende 
Fehlermeldung auftaucht:
helloworld.c:(.text+0x108): undefined reference to 'XGpio_DiscreteWrite'

Jetzt habe ich ein bisschen geforscht und bin darauf gestoßen, dass ich 
einerseits die c-Files mitkompilieren muss.

Jetzt habe ich alle nötigen c-Files und Headers in einen Ordner gepackt 
und versucht das ganze zu kompilieren mit:
gcc helloworld.c platform.c [alle weiteren genutzten c-Files] -o helloworld_o

Problem, dass er jetzt irgendwelche Errors von invaliden Instruktionen 
in einem File ausspuckt. Wobei das ist ein Musterfile, ohne Probleme 
eigentlich.
Wenn ich den shell-Command:
make helloworld
nutze, kommt die Fehlermeldung von oben, wobei ich die nötigen Files 
eingebunden habe.

Da ich noch ein totaler Anfänger diesbezüglich bin, wäre ich um einen 
Tipp froh, wo mein Fehler liegt!

Merci beaucoup!

: Verschoben durch Moderator
Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für mich sieht das so aus als wolltest du ein bare metal xilinx example 
für linux compilieren. Das geht natürlich so nicht. Du müsstest unter 
Linux erstmal deinen xilinx gpio Treiber (Modul) laden und dann über das 
gpio Interface mit read bzw write zugreifen.
Siehe http://www.wiki.xilinx.com/Linux+GPIO+Driver

Bzw. du könntest theoretisch natürlich auch dein GPIO via mmap in den 
Userspace mappen und dann selbst in den Registern rumfummeln, was 
natürlich nicht unbedingt die schönste art ist.

: Bearbeitet durch User
Autor: Hmmm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst die Files compilen:

gcc -o test.o -c test.c
[...]

Danach alles linken und dabei notwendige Libraries nicht vergessen:

gcc -o test test.o foo.o bar.o -lirgendeinelibrary

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm schrieb:
> Erst die Files compilen:
> Danach alles linken und dabei notwendige Libraries nicht vergessen:

Durch Deinen Vorschlag bekommt der TO seine Fehlermeldungen aber nicht 
weg. Jeder cc, sei er noch so dämlich programmiert, kann beides in einem 
Rutsch. Das kannst Du sogar wild mischen:

 cc a.c b.c c.o d.o e.c -lX -o x

: Bearbeitet durch Moderator
Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
3 lesenswert
nicht lesenswert
derNeue schrieb:
> Ich bin gerade dabei ein Programm zu kompilieren mit gcc (auf Linux).

Du verschweigst die wichtigsten Infos:

- Das zu erzeugende Target soll welche Platform sein?
  Die Linux-Büchse selbst?

- helloworld.c sieht wie aus?

- Ist oben genannte die einzige Fehlermeldung?

: Bearbeitet durch Moderator
Autor: Hmmm (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Frank M. schrieb:
> Durch Deinen Vorschlag bekommt der TO seine Fehlermeldungen aber nicht
> weg.

Wenn er den Hinweis bzgl. der Libraries beachtet und kein Source-File 
vergisst, schon, denn danach riecht die Linker-Fehlermeldung.

Die Aufteilung erhöht natürlich nur die Übersichtlichkeit und macht es 
leichter, daraus ein funktionierendes Makefile zu bauen.

Autor: PittyJ (Gast)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
undefined reference to 'xxx'
kennt man, wenn man länger mit C programmiert. Da weiss man dann, das 
irgendwelche Symbole nicht mitgelinkt werden.

Anscheinend hast du so etwas noch nie gemacht, dann würde ich mal sagen, 
du solltest ein paar Stufen einfacher einsteigen. Besorg dir am besten 
ein C Lehrbuch und fang ganz von vorne an. Zuerst mit 10-Zeilern in 
einer einzigen Datei.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Und wie bereits in meiner ersten Antwort geschrieben, ist 
XGpio_DiscreteWrite immer noch eine Funktion aus dem Xilinx SDK welche 
nur für Bare-Metal gedacht ist. Der TO versucht ein Bare-Metal Example 
für Linux zu kompilieren, was so natürlich nicht funktioniert weil man 
als Linux-Applikation erstmal keinen direkten Zugriff (ohne mmap) auf 
die physikalische Speicher-Adresse hat, da hilft es auch nicht die Lib 
zu kompilieren und dazu zulinken (auch wenn der Fehler dann 
möglicherweise weg ist, ist die Funktion erstmal nicht gegeben)

Autor: derNeue (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Vielen Dank für die vielen Antworten!
Ich muss an dieser Stelle Timmo H. rechtgeben

Timmo H. schrieb:
> Für mich sieht das so aus als wolltest du ein bare metal xilinx example
> für linux compilieren

Ich werde mal den Linuxtreiber laden und hoffentlich so weiterkommen!

Vielen Dank trotzdem für jede Zeile Hilfe!

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
derNeue schrieb:
> irgendwelche Errors von invaliden Instruktionen in einem File

Geht es noch etwas unspezifischer? Welche Errors? Und was steht in dem 
File an der Stelle, auf die sie sich beziehen?

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.