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.
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.
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ß
"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.
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...
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.
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
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.
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"
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.
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?
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
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
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.
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
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?
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.
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.
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.
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.
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.