.c und .h File vorkompilieren



  • hi leute

    ich habe ein Hauptprogramm "main.c"
    dazu die dateien "network.h" und "network.c"

    Die "network.h" enthält die notwendigen strukturen und die prototypen der Funktionen die in "network.c" enthalten sind.

    Die "network.c" enthält die Funktionen.

    Nun möchte ich im Hauptprogramm "main.c" diese Funktionen nutzen.
    Die "network.h" habe ich mit

    #define "network.h"
    

    eingebunden.
    Wenn ich es kompiliere bekomme ich den Fehler

    "[Linker Error] Undefined Reference ... Funktionenname"

    Das liegt vermutlich daran, dass ich kein Projekt erzeugt habe, in dem alle drei Dateien enthalten sind, und somit die beiden network-dateien nicht kompiliert werden.

    Auf Projekte möchte ich dem Fall verzichten.
    Wie kann ich also die beiden network-dateien bereits vorkompilieren um sie dann nur noch ganz einfach in das hauptprogramm "main.c" einzubinden?



  • It0101 schrieb:

    Die "network.h" habe ich mit

    #define "network.h"
    

    eingebunden.

    das muss heissen '#include' und nicht '#define'...
    🙂



  • du musst richtig linken. Wie man das macht erfährst du im Handbuch deines Compilers (aber ja vermutlich würde er sich darum automatisch kümmern, hättest du ein Projekt angelegt...)



  • ja sry hab natürlich #include geschrieben, ist nur nen tippfehler 🙂

    Ja ich will aber eben auf das Projekt verzichten. Weil ich von dem Hauptprogramm ungefähr jeden tag ne neue Version habe. Wenn ich die zwei Dateien vorkompilieren kann, dann brauch ich die einfach bloss einbinden, egal wo. Das ist der Sinn der Sache.

    Und daher frage ich die Fachleute hier, wie ich die dateien so vorkompilieren kann dass jedes Hauptprogramm die einfach nur einbinden muss, um die Funktionen zu nutzen.



  • Ich glaub was du willst ist ne dll dafür.



  • It0101 schrieb:

    Und daher frage ich die Fachleute hier, wie ich die dateien so vorkompilieren kann dass jedes Hauptprogramm die einfach nur einbinden muss, um die Funktionen zu nutzen.

    Naja als erstes wäre es schonmal nett zu wissen welchen Compiler du verwendest.
    Eine einfache Lösung wäre jeweils immer die *.o bzw. *.obj Files zu nehmen 🙂

    Headerfiles kannst du nicht kompilieren - sie enthalten ja keine Code sondern nur Prototypen und Definitionen.

    It0101 schrieb:

    Wenn ich es kompiliere bekomme ich den Fehler
    "[Linker Error] Undefined Reference ... Funktionenname"

    Naja den Fehler bekommst du nicht beim Kompilieren sondern beim Linken der Objektfiles.
    Mit welchen Optionen rufst du denn den Kompiler/Linker auf bzw. welches Kommando ruft deine IDE auf?

    So wie es für mich aussieht wird die Objektdatei nicht mitgelinked und deshalb findet er sie nicht.

    Greetz



  • es gibt keine objektdatei vermute ich, ich glaube die wird nur erzeugt wenn man ein projekt erstellt. Aber darauf würde ich gern verzichten. Vielleicht sollte ich mir wirklich eine DDL erzeugen. Dazu werde ich erstmal ein paar Tutorials lesen müssen.

    Der Compiler ist gcc, die Entwicklungsumgebung ist Dev-C++ (Bloodshed)



  • It0101 schrieb:

    es gibt keine objektdatei vermute ich, ich glaube die wird nur erzeugt wenn man ein projekt erstellt. Aber darauf würde ich gern verzichten. Vielleicht sollte ich mir wirklich eine DDL erzeugen. Dazu werde ich erstmal ein paar Tutorials lesen müssen.

    Der Compiler ist gcc, die Entwicklungsumgebung ist Dev-C++ (Bloodshed)

    Es gibt immer eine Objektdatei... ohne Objektdatei gibt es kein ausführbahres C-Programm.
    http://de.wikipedia.org/wiki/Compiler

    Nur wegen einer C-Datei eine DLL bzw. Library zu erstellen halte ich für völlig oversized... Du hast die beiden Dateien ja... also erzeuge den Objectcode und linke die Objektfiles zusammen, z.B. so:

    gcc -c network.c -o network.o
    gcc -c main.c -o main.o
    gcc -o run_prog main.o network.o

    🙂



  • codefrag schrieb:

    gcc -c network.c -o network.o
    gcc -c main.c -o main.o
    gcc -o run_prog main.o network.o

    Kann man dafür nicht auch ein Makefile verwenden?

    mfg Vanice


Anmelden zum Antworten