Forum: Compiler & IDEs compile mit gcc


von derNeue (Gast)


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:
1
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:
1
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:
1
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 User
von Timmo H. (masterfx)


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
von Hmmm (Gast)


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

von Frank M. (ukw) (Moderator) Benutzerseite


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
von Frank M. (ukw) (Moderator) Benutzerseite


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
von Hmmm (Gast)


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.

von PittyJ (Gast)


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.

von Timmo H. (masterfx)


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)

von derNeue (Gast)


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!

von Rolf M. (rmagnus)


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?

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.