Wie erstellt man statische Bibliotheken und bindet diese ein?



  • Ich hoffe, dass sich jemand die Zeit nimmt mir dies zu erklären, denn ich bin beim googeln zu keinem Ergebnis gekommen und bin jetzt ziemlich frustriert, denn:

    Ich habe mit Code::Blocks die statische Beispielbibliothek erstellt und kompiliert -> Es entsteht eine .a lib. Sourcecode:

    int SampleAddInt(int i1, int i2)
    {
    	return i1 + i2;
    }
    

    Nun will ich diese von einem meiner Programme aufrufen. Dazu habe ich sie mittels Build->Compiler Options->Linker gelinkt.
    Der Code Meines Programmes:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout<<SampleAddInt(5,3);
        system("pause");
    };
    

    Wie ihr euch villeicht schon denken könnt klappt es nicht 😞
    Kann mir bitte jemand erklären, was ich falsch mache und wie es richtig sein muss?
    Ich versuche seit Ewigkeiten Libraries aus dem Internet einzubinden (sei es allegro/libcurl/etc.) doch nie finde ich eine Anleitung, die es mir verständlich erklärt. Ich arbeite nie mit einem Commandozeilencompiler und habe keinen Plan wie ich eine Makefile schreibe und gebrauche. Bis jetzt habe ich immer die Funktionen von Code::Blocks benutzen können, aber leider befindet sich auch in der Code::Block Doku keine Anleitung zum einbinden von Bibliotheken - Warscheinlich ist dies einfach Grundwissen, dass von Allen vorrausgesetzt wird.
    Vielen Dank für eure Hilfe



  • alfonsospringer schrieb:

    Wie ihr euch villeicht schon denken könnt klappt es nicht 😞

    oh, geil. Das konnt ihc mir natürlich nciht denken. Ey, warum solltest du sonst die Frage stellen? Viel wichtiger zu wissen wäre doch, was klappt nicht? Fehlermeldungen? Kompiliert er nicht? Linkt er nciht? OS?

    Meine Kristallkugel sagt mir: deine sourcefile der lib hat die endung .c deine exe/binary-source hat die endung .cpp. Änder die lib-source-endung in .cpp. Dsa selbe hatte ich auch mal bei CB. Dämlicher Fehler



  • Ich bekomme den Fehler: "SampleAddInt undeclared"
    ->was das bedeutet weiss ich, aber warum kommt es? Ich habe die Bibliothek doch gelinkt und somit müsste er doch auch die Funktion finden.

    Wenn ich die Sourcefile der Library in *.cpp umbenenne entsteht beim kompilieren keine Bibliothek mehr



  • wenn du weißt was es bedeutet, dann solltest du auch wissen, dass du den header der library in die main.cpp inkludieren musst.

    also ein #include "DeinLibHeader.h"

    die könnte zB so aussehen:

    int SampleAddInt(int i1, int i2);
    

    Du musst dem Compiler doch sagen, dass es die gibt. Der kennt doch gar nicht die lib, denn erst der linker benutzt die lib.
    Joa... also. Und die datei muss .cpp heißen, sonst wird sie als c-code kompiliert und dann findet der linker nicht die cpp-version von SampleAddInt. Also... Oder du machst nochn extern "C" vor die Zeile im HEader



  • juhu - es klappt

    thx maxi


Anmelden zum Antworten