Brauche Hilfe beim erzeugen einer Static Lib

  • Ich habe Probleme beim erzeugen einer static Lib.
    Ich habe zwei source files und ich weis nicht wie ich die richtig zusammen linke.


    extra.h

    Code
    int add(int a, int b);


    extra.c

    Code
    int add(int a, int b) 
    { 
    return a + b; 
    }


    mylib.h

    Code
    #include "extra.h" 
    int result(int a, int b);


    mylib.c

    Code
    int result(int a, int b) 
    { 
    return add(a, b); 
    }


    Kompelieren:

    Code
    gcc -c mylib.c -o mylib.o


    Es kompeliert ohne Probleme. Danach erzeuge ich das static library:

    Code
    ar rcs libmylib.a mylib.o


    Wenn ich nun die static library mit meinem Hauptprogramm verlinke kommt die Meldung 'undefined refernce to function "add"'.


    Wie erzeuge ich die static library richtig?

  • Das ist jetzt nicht dein Ernst, oder? Die Funktion add() ist doch in extra.o und nicht in mylib.o. extra.o ist aber nicht in libmylib.a.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • _Martin_: Ich glaube nicht, dass es hilfreich ist wenn man das Problem in einem Makefile versteckt. Es schadet ja nicht wenn man erst mal lernt zu verstehen was man da denn eigentlich macht.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • gda: ich verstecke nichts :) Ich hatte nun keine große Lust mir alles durchzulesen wusste aber das ich mal das gleiche Problem hatte, deswegen habe ich das Makefile gepostet. Es ist mir klar das es nicht die Lösung für dieses Problem hier ist, sollte aber als Hilfestellung dienen selbst auf die Lösung zu kommen ;)


    Grüße
    Martin

  • Ich habe ja schon probiert das ich die Object Files mit der mylib beim kompelieren verlinke.


    Es kompeliert auch braf.


    Wenn ich aber nun die static lib in meinem Hauptprogramm reinnehme kommt das raus:




    Kann man in Linux bei einer static lib eigentlich auch die Funktionen definieren die exportiert werden sollen?


    Oder werden automatisch alle exportiert?

  • Du bringst einiges durcheinander. Beim Compilieren wird nicht gelinkt. Das sind 2 Paar Schuhe.


    Zu der Fehlermeldung kann ich nichts sagen, außer dass du ein Objekt-File jetzt 2 mal dazu linkst.


    Warum machst du nicht einfach:

    Code
    ar rcs libmylib.a mylib.o extra.o


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Code
    ar rcs libmylib.a mylib.o extra.o


    Führt zum gleichen Ergebnis wie oben, dass mehrere Funktion doppelt definiert sind...



    EDIT:


    Fehler gefunden! Habe die mylib ohne den Paramter "-c" kompeliert. Somit wurde gelinkt. Dann in der static lib im Hauptprogramm wurde nochmal gelinkt was zu multiple Defnition führt...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!