Bibliothek erstellen

Gast #4822656
Lesenswert?
• ▲
▼
Guten Abend,

ich arbeite mit AtmelStudio 7.0 und programmiere Atmegas. Derzeit einen 
Atmega 644. Ich programmiere in C.

Kann mir jemand sagen, wo ich ein Tutorial finde, welches mir das 
Erstellen eigener Bibliotheken näher bringt? Mein derzeitiges Programm 
ist inzwischen sehr unübersichtlich, ich würde gern verschiedene Dinge 
auslagern. Ich habe aber Probleme bei der Deklaration von Variablen, die 
ich sowohl im auszulagernden Code als auch in der Main verwende.

Danke!
#4822696
Lesenswert?
• ▲
▼
ArduStemmi schrieb:
> Header Datei hab ich schon, da soll und will ich aber keine Funktionen
> hin auslagern!

In eine header kommt auch keine Funktion, sondern ein Prototyp.

Peter II schrieb:
> das hat aber nicht mit Bibliotheken zu tun.
>
> Hast du noch alles in einer Datei oder hast du mehre C Dateien?

Wie Peter II schon sagt, musst du eine Biblithek einrichten, sprich du 
brauchst auch eine .c Datein in der die eigentliche Funktion geschrieben 
wird.
Dann müsstest du mit dem Funktionsaufruf deine Variablen an die Funktion 
übergeben, sprich:
1
int funktion_addiere(int a, intb)
2
{
3
int c=0;
4
c=a+b;
5
return c;
6
}
7

8
int main(void)
9
{
10
int a=3, b=5, c=0;
11

12
c=funktion_addiere(a, b);
13

14

15
}

ArduStemmi schrieb:
> Ich habe aber Probleme bei der Deklaration von Variablen, die
> ich sowohl im auszulagernden Code als auch in der Main verwende.


Du willst also nur eigene "Unterprogramme" schreiben, welche im selben 
File wie deine main.c Datei ist?

Dann würdest du nur "globale" Variablen, anstatt "lokaler" brauchen...
Gast #4822784
Lesenswert?
• ▲
▼
Oder so, ja! Ich will das mit dem
1
#include
machen, das sieht immer so hübsch aus!

Macht es Euch doch bitte nicht so schwer. Ich möchte eine C-Datei auf 
mehrere andere verteilen, am Ende soll immer noch das selbe Programm 
rauskommen. Bisher war ich der Meinung, das man mit
1
#include

Bibliotheken einbindet, wenn das anders heißt, dann bitte.
#4822789
Lesenswert?
• ▲
▼
ArduStemmi schrieb:
> Ich möchte eine C-Datei auf
> mehrere andere verteilen, am Ende soll immer noch das selbe Programm
> rauskommen.

W.A. hätte dir die Antwort schon gegeben ;-)

W.A. schrieb:
> Header-Datei und Inlude sind deine Stichworte

Eine .h reicht aber noch nicht. Du musst, um Funktionen auszulagern, 
noch eine .c schreiben.
Wenn du nun deine Funktionsaufrufe in der "main" machst, musst du wohl 
auch einige Variablen übergeben... oder Pointer(adressen).
Persönliche Seite #4822797
Lesenswert?
• ▲
▼
ArduStemmi schrieb:
> Bisher war ich der Meinung, das man mit
> #include
> Bibliotheken einbindet, wenn das anders heißt, dann bitte.

Dieser Meinung sind leider viele, was bei der Diskussion mit Leuten, die 
wissen, wovon sie reden, unnötige Verwirrung stiftet.

Wenn Du in die Autowerkstatt gehst, und im Brustton der Überzeugung 
erzählst, daß die Kupplung kaputt ist, damit aber das Ding meinst, auf 
dem "R-1-2-3-4-5" draufsteht ...
Gast #4822811
Lesenswert?
• ▲
▼
Du kanns beliebige Teile des Programmcodes einer C-dATEI - z.B. eine 
einzelne switch-Anweisung - mit #include "abc.h" auslagern. Das ist 
nicht die feine Art, aber einfach und unkomliziert.

Wenn du es "richtig"/professionel machen willst, musst du eine 
selbständig kompilierbare *.c-Datei anlegen, weil Funktionen nicht in 
headerdateien stehen dürfen. Dann bekomjmst du aber Probleme mit 
Variablen, die in mehreren C-Dateien benötigt werden. Die müssen dann 
einmal deklariert und im übrigen mit "extern" bekannt gemacht werden. 
Jede Änderung der Variablen muss dann an mehreren Stellen nachvollzogen 
werden.
Gast #4822829
Lesenswert?
• ▲
▼
grundschüler schrieb:
> Du kanns beliebige Teile des Programmcodes einer C-dATEI - z.B. eine
> einzelne switch-Anweisung - mit #include "abc.h" auslagern. Das ist
> nicht die feine Art, aber einfach und unkomliziert.
>
> Wenn du es "richtig"/professionel machen willst, musst du eine
> selbständig kompilierbare *.c-Datei anlegen, weil Funktionen nicht in
> headerdateien stehen dürfen. Dann bekomjmst du aber Probleme mit
> Variablen, die in mehreren C-Dateien benötigt werden. Die müssen dann
> einmal deklariert und im übrigen mit "extern" bekannt gemacht werden.
> Jede Änderung der Variablen muss dann an mehreren Stellen nachvollzogen
> werden.

Genau das möchte ich machen! Jetzt meine Frage, weiß jemand, wo ich ein 
Tutorial oder ein Beschreibung finde, wie man das richtig macht!
#4822839
Lesenswert?
• ▲
▼
Hallo,

du erstellt eine .c und eine .h Datei. Die .h Datei bindest du in deinen 
Quelltext ein. Damit sind die Funktionen in deiner .c Datei dem Compiler 
bekannt.

Dann musst du deine .c Datei kompilieren um eine "Library" zu bekommen, 
die heißt unter Windows dann .dll und unter Linux .a oder .so.

Dann musst du deinem Linker diese Dateinamen mitgeben, damit er die auch 
in dein Projekt integrieren kann. Wenn nicht gibts halt Linker errors.

Grüße,
Martin
Persönliche Seite #4822842
Lesenswert?
• ▲
▼
Martin B. schrieb:
> Dann musst du deine .c Datei kompilieren um eine "Library" zu bekommen,
> die heißt unter Windows dann .dll und unter Linux .a oder .so.

Nein. *.dll bzw. *.so sind dynamische Libraries, die erst zur Laufzeit 
des Programmes geladen werden.

Libraries heißen je nach Compiler/Buildsystem *.a oder *.lib.

Um aber ein Projekt aus mehreren C-Quelltext-Dateien zusammenzusetzen, 
wie vom Threadstarter gewünscht, sind Libraries gar nicht erforderlich.

Jede einzelne *.c-Datei wird vom Compiler einzeln übersetzt, das 
Ergebnis ist eine "Objektdatei" (je nach Compiler/Buildsystem *.o oder 
*.obj). Um eine fertige Binärdatei/ausführbare Datei zu erhalten, werden 
alle zum Projekt gehörenden Objektdateien dem Linker vorgeworfen, der 
sie mit dem Startupcode und gegebenenfalls auch Code aus Libraries 
anreichert.

In Libraries wird bei üblichen Compilern/Buildsystemen der Code von 
Funktionen, die zum C-Standard gehören (wie printf, fopen, strcpy etc.) 
untergebracht.

Wie der Compiler und wie der Linker aufzurufen sind, und wie die genaue 
Syntax beim Angeben der jeweils zu verwendenden Libraries ist, ist 
abhängig vom verwendeten Compiler/Buildsystem -- da lohnt ein Blick ins 
Handbuch bzw. in die Dokumentation.
Gast #4822847
Lesenswert?
• ▲
▼
Typischer Verlauf eines Threads wo ein Laie/Anfänger grosse
Dinge tun will. Er weiss nicht einmal warum man *.h Dateien
erzeugt und ihr überschüttet ihn mit hochfachlichen
Vorschlägen / Ausdrücken zu speziellen Build-Vorgängen.

Ich wette dass der TO nur Bahnhof versteht.
Gast #4822856
Lesenswert?
• ▲
▼
Linkerblinker schrieb:
> Typischer Verlauf eines Threads wo ein Laie/Anfänger grosse
> Dinge tun will. Er weiss nicht einmal warum man *.h Dateien
> erzeugt und ihr überschüttet ihn mit hochfachlichen
> Vorschlägen / Ausdrücken zu speziellen Build-Vorgängen.
>
> Ich wette dass der TO nur Bahnhof versteht.

Genau! Ich hatte eine Frage gestellt die mit einem Buchtitel oder einer 
Internetadresse zu beantworten war. (Wobei ich mir jetzt nicht sicher 
bin, ob ich nicht mit dem Begriff Internet-Adresse schon wieder alle 
Ineternet-Profis auf den Plan rufe, die mir erklären, dass es gar keine 
Adresse im eigentlichen Sinne ist sondern nur der Verweis auf einen Ort, 
wo der Hinweis versteckt scheint, das eine IP-Nummer existieren könnte, 
die aber auch nicht immer richtig sein muss.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren