Forum: Mikrocontroller und Digitale Elektronik undefined reference to und datei einbinden


von torben (Gast)


Lesenswert?

hi,

ich hab 2 probleme, die mir sehr komisch beim avr studio 6 vorkommen.

bei dem einen habe ich versucht eine standard bibliothek einzubinden, 
die ich selbst erstellt habe, auch im richtigen verzeichnis.
gestern hat es noch funktioniert, jetzt nicht mehr. die funktionen, die 
ich benutzen möchte, werden in der main.c als vorschlag angezeigt, 
jedoch kommt beim kompilieren immer das "undefined refence to"-problem 
zu den funktionen. ansich müssen die files ja im explorer sein, aber ich 
hab extra dafür eine bibliothek aufgemacht, um mit mit <> nichts in den 
explorer einzufügen und es nicht mehr machen zu müssen.

das andere problem ist richtig schräg.

in manchen  neu erstellten projekten gibts das problem nicht, in anderen 
schon.
ich hab nämlich eine header datei, die ich mit "../blabla/header.h 
auswähle.
wird nicht erkannt, obwohl der weg korrekt ist und bei anderen projekten 
es so klappt. erst wenn ich den kompletten  (c:/blablba) weg in " " 
reinballer, klappts, das ist voll nervig.

wisst ihr rat?

und nervt mich nicht mit google, ich hab nix vergleichbares gefunden.

: Gesperrt durch User
von Sebastian V. (sebi_s)


Lesenswert?

torben schrieb:
> jedoch kommt beim kompilieren immer das "undefined refence to"-problem

Die undefined reference Fehler kommen vom Linken und nicht vom 
Compilieren. Hast du auch daran gedacht deine Library dazu zu linken? 
Nur mit dem include von den Headern ist es nicht getan.

von torben (Gast)


Lesenswert?

ey erstmal danke für die schnelle antwort.

also, ehrlich gesagt, weiß ich nicht so genau, wie ich meine biblio 
linke. man muss z. b., wenn man <math.h> eintippt ja nix mehr in den 
explorer reinballern, ne?

das gleiche würde ich z.b. mit meinem scheiß code machen.
also sozusagen <ordner/blabla/blabla.h> ohne es im explorer zu bomben. 
einfach den shit #include <ordner/blabla/blabla.h> schreiben und seine 
scheiß funktionen dann zu haben.

hab echt kein bock immer wieder nen ordner da zu klatschen und dort die 
scheiß header einzubinden und es im explorer auch anzugeben, geht mir 
voll auf die eier, ey. ehrlich code putzen geht echt auf die nerven man.

ich hoffe ihr wisst was ich meine, man. bin aggro grad vom dem scheiß

von torben (Gast)


Lesenswert?

avr studio 6 find ich dumm... nur so nebenbei

von torben (Gast)


Lesenswert?

mano, weiß keiner rat?

von Stefan R. (srand)


Lesenswert?

"reinballern", "bomben", "scheiß".

Geh zurück zu den Wachsmalstiften und laß deine Programmierversuche 
einfach sein.

Wenn du die Pubertät erreicht hast, darfst du gherne wiederkommen.

von torben (Gast)


Lesenswert?

man, is doch wayne oder? hauptsache programmieren, digga, wo ist das 
problem?
scheiß drauf, ich machs auf die idioten art mit scheiß ordnern

von torben (Gast)


Lesenswert?

könntet nem homie ruhig mal helfen, ey

von torben (Gast)


Lesenswert?

wie macht man das, dass man nur noch #include <ordner/header.h> 
eintippt, um die funktionen, die man geschrieben hat, verwendet?

ich bin in den ordner atmel gegagen, toolchain usw. bis halt zu include, 
wo auch math und so sind und dort dann eben mein zeugs reinkopiert 
(atmel studio 6.2).

und das mit dem verlinken weiß ich nicht wie. wie gesagt, ich kann es 
natürlich in den solution explorer einfügen, aber gehts auch ohne?


ey das mit oben war nur spaß, dachte ihr habt humor.

mach keine witze mehr...

von torben (Gast)


Lesenswert?

im ordner buttom_press z. b. ist eben ein eigener code, um tasten zu 
entprellen. dort sind header und c file enthalten.

das ist der weg dorthin

C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 
GCC\Native\3.4.1056\avr8-gnu-toolchain\avr\include\button_press

und ich kann in einem neuen projekt die funktionen als vorschlag 
erhalten.
nur linken tuts nicht.

es muss doch möglich sein, einfach eben #include 
<button_press/ButtonPress.h> einzutippen, um die funktion 
Buttonpressed() zu verwenden, ohne dass im solution explorer einzufügen.

von torben (Gast)


Lesenswert?

ey hilft mir mal bitte, sitze schon lange dran und finde nix. sorry das 
mit ballern und so, dachte ihr lacht dabei ey. kommt schon, weiß 
bestimmt doch jemand wie es richtig geht

von Sebastian V. (sebi_s)


Lesenswert?

Das Problem ist, dass deine Library nicht nur aus Headern sondern auch C 
Dateien besteht und wenn du nur #include <button_press/ButtonPress.h> 
schreibst dann hast du zwar den Header aber die C-Datei fehlt dir immer 
noch. Eine Lösung die funktionieren müsste, wäre in deinem Projekt eine 
C-Datei zu erstellen und dort nur #include <button_press/ButtonPress.c> 
zu schreiben. Include kopiert ja auch nur den Dateiinhalt der 
angegebenen Datei an diese Stelle.

: Bearbeitet durch User
von Thomas H. (Firma: CIA) (apostel13)


Angehängte Dateien:

Lesenswert?

Mach es so, wie man es im AVR-Studio macht. Füge >>alles<<  was Du 
einbinden  möchtest über den Solution Explorer zum Projekt hinzu und 
binde es ein mit:

#include "wass_auch_immer.h"

von Stefan R. (srand)


Lesenswert?

torben schrieb:
> es muss doch möglich sein, einfach eben #include
> <button_press/ButtonPress.h> einzutippen, um die funktion
> Buttonpressed() zu verwenden

Nein, das muß nicht möglich sein.

von Stefan R. (srand)


Lesenswert?

Sebastian V. O. schrieb:
> Eine Lösung die funktionieren müsste

Das ist keine Lösung, sondern das denkbar dümmste, was man tun kann.

Supportest du ihn bei den Problemen, die in zwei, drei Tagen 
unweigerlich auftreten?

von torben (Gast)


Lesenswert?

ja vielen dank für die antworten,

erstmal ists voll schräg, dass jemand atmel studio 6.2 unter mac hat. 
wusste nämlich garnicht, dass es fürm mac gibt. hab nämlich windows aufm 
apple air und zock da atmel studio.

das mit existing file kenn ich schon, wollte es aber nicht verwenden,

aber trotzdem danke dafür

von torben (Gast)


Lesenswert?

und sehr großen dank an den kollegen sebastian, hast meinen tag 
gerettet, dicka. ehrlich, klappt mit deinem vorschlag.
boah man, das hat mich echt angekozt

von torben (Gast)


Lesenswert?

klatsche alles in die header nur noch, eeey jooo ey

von Sebastian V. (sebi_s)


Lesenswert?

Stefan Rand schrieb:
> Supportest du ihn bei den Problemen, die in zwei, drei Tagen
> unweigerlich auftreten?

Ich wüsste nicht was für Probleme da auftreten sollten. Effektiv kopiert 
man sich damit eine C-Datei ins Projektverzeichnis. Solange man nicht 
versucht mehrere C-Dateien in eine Datei zu packen sehe ich kein Problem 
auch wenn das nicht gängige Praxis ist.

Eine andere Lösung die dem TO eventuell gefallen könnte: Wenn die 
Library die du einbinden möchtest von dir ist oder es dir nichts 
ausmacht die Library eines Anderen umzuschreiben, dann kannst du die 
C-Dateien loswerden indem du alle Funktionen als inline deklarierst und 
die Funktionsdefinitionen in den Header packst. Das geht aber auch nur 
wenn die Library keine globalen Variablen benutzt.

von torben (Gast)


Lesenswert?

streitet euch nicht freunde, klatsche es in die header, geht nämlich 
auch.

wäre nicht darauf gekommen, dass es so nicht geht, mit methodenköpfe in 
der header und den verfi**ten funktionen in c datei

von Stefan R. (srand)


Lesenswert?

Sebastian V. O. schrieb:
> Ich wüsste nicht was für Probleme da auftreten sollten.

Wenn du keine Ahnung hast, dann bist du vielleicht nicht der richtige, 
um "Lösungen" anzubieten, nicht wahr?

von torben (Gast)


Lesenswert?

dicka, seid nicht so hater mäßig drauf. sebastian hat meinen tag 
gerettet, ehrlich, wäre sonst echt jetzt deprimiert. klatsche die 
funktionen in die header, jo.

von Sebastian V. (sebi_s)


Lesenswert?

Stefan Rand schrieb:
> Sebastian V. O. schrieb:
>> Ich wüsste nicht was für Probleme da auftreten sollten.
>
> Wenn du keine Ahnung hast, dann bist du vielleicht nicht der richtige,
> um "Lösungen" anzubieten, nicht wahr?

Kläre mich auf. Zeig mir ein Beispiel, bei dem mein Vorschlag Probleme 
macht.

von torben (Gast)


Lesenswert?

ey, jooo ey, voll das krasse programmier battle, ey. jojo

voll spannend muss ich sagen.

ja stefan, wieso gehts nicht, häh?

von Stefan R. (srand)


Lesenswert?

Sebastian V. O. schrieb:
> Kläre mich auf. Zeig mir ein Beispiel, bei dem mein Vorschlag Probleme
> macht.

Vier Wochen später nimmt er die C-Datei doch in das Projekt auf.

Was "multiple definitions" sind, weiß er nicht so richtig, und wenn er 
versucht, dem nachzugehen, dann ist der Compiler offensichtlich 
fehlerhaft, weil er eine Definition in myLibrary.c, Zeile 307, und eine 
weitere Definition in myLibrary.c, Zeile 307 anmeckert.

Und das kann ja nicht sein.

von torben (Gast)


Lesenswert?

ey, stefan, danke für deine vorsorge, ey. ihr seid schon korrekt hier, 
schätze aber trotzdem, dass ihr alles alte säcke seid

von Sebastian V. (sebi_s)


Lesenswert?

Wenn man das macht ist das natürlich blöd gelaufen, hat aber nicht 
direkt mit meinem Vorschlag zu tun. Genauso gut könnte man die Library 
zweimal ins Projekte kopieren. Die Fehlermeldungen die man dann kriegt 
sind genauso "kompliziert" wie wenn man in einem Header eine Funktion 
definiert und in zwei C-Dateien nutzt und dieser Fehler ist vermutlich 
jedem C Programmierer schonmal passiert. Ein bisschen mitdenken muss man 
natürlich schon.

von Stefan R. (srand)


Lesenswert?

Sebastian V. O. schrieb:
> zweimal ins Projekte kopieren. Die Fehlermeldungen die man dann kriegt
> sind genauso "kompliziert" wie wenn man in einem Header eine Funktion
> definiert und in zwei C-Dateien nutzt und dieser Fehler ist vermutlich

Nein, die IDE wird dir zeigen, da´ß es zwei verschiedene Dateien mit 
selbem Namen sind. Das ist qualitativ in der Hitze der Fehlersuche etwas 
ganz anderes als die angenommene Fehlermeldung in meinem Beispiel.

von torben (Gast)


Lesenswert?

ey, habt ihr auch wie ich kein leben?

von torben (Gast)


Lesenswert?

ich hab jetzt das problem mit dem multiple functions

von torben (Gast)


Lesenswert?

wie kann ich das loswerden? ich hatte 2 dateien aus dem gleichen ordner 
included.
und jetzt krieg ich das problem nicht weg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich glaube nicht, daß wir hier weiter "torbens" Lernverweigerung folgen 
müssen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.