undefined reference to und datei einbinden

Gast #3836914
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.
Gast #3836935
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ß
Gast #3837031
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...
Gast #3837032
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.
#3837049
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.
Gast #3837095
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
#3837111
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.
Gast #3837120
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
#3837150
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.
#3837163
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.
#3837367
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.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.