Lib erstellen die andere libs verwendet



  • Hallo zusammen,

    ich habe eine kurze Frage:

    Kann ich (und wenn, dann wie) ein lib erstellen, die sowohl boost, als auch protobuf includet?
    Ich benutze teile von beiden Libs in meinem Projekt, das ich nun zur weiteren Entwicklung in andere Abteilungen weiter geben muss. Diese wollen dann meine Libs (auch in andere Sprachen) einbinden und auf Methoden davon zugreifen.

    die genaue Implementierung ist mit dem plmpl Idiom nach außen abgekapselt, nur die Elemente innerhalb der Lib verweisen halt noch auf boost und proto.

    Ihr würdet mir da wirklich sehr helfen wenn ihr mich in die richtige Richtung stupsen könntet (oder wenn das nicht geht... wäre das auch schon ein mal eine Antwort)

    Liebe Grüße
    EvD



  • Wenn du die statischen Libs einbindest, dann beinhaltet deine Lib (egal ob statisch oder als DLL) den Object-Code direkt.
    Bei dynamischer Einbindung müßtest du deren DLLs auch zusammen mit deiner Lib mit ausliefern.

    Zumindestens bei boost sind viele Teilfunktionalitäten header-only, d.h. da ist der Code sowieso direkt in deiner Lib einkompiliert. Nur wo du explizit eine Boost-Lib beim Linken angeben mußt, ist obiges entscheidend.



  • @Th69
    in der Tat habe ich boost jetzt auch soweit hinbekommen (hatte kleinere Fehler beim plmpl, jetzt gehts aber). Nur Protobuf scheint mir noch einen Strich durch die Rechnung zu machen 😕

    Ich habe Sogar noch einen Schritt gemacht das ich eine Weitere Lib mache in der ich nur protobuf in, durch plmpl abgekapselte Klassen in eine static lib gepackt habe ... aber scheint immer noch keine Lust darauf zu haben 😕

    ich habe Static linking aktiviert, aber solange ich das Programm nicht komplett builde scheint es die Dateien nicht mit ein zu binden

    g++ -c -DBUILD_SHARED_LIBS=ON *.c* -I /usr/local/include -lpthread -L/usr/local/lib -lprotobuf -L. -l:../lib/IPCCom.sll
    

    will nicht ohne Protobuf laufen, sobald ich aber eine main.cpp dazu packe und alles zusammen kompiliere kann man die executable auch auf allen anderen Rechnern ohne protobuf ausführen ... ich bin sehr verwirrt.



  • @EvD sagte in Lib erstellen die andere libs verwendet:

    Ich habe Sogar noch einen Schritt gemacht das ich eine Weitere Lib mache in der ich nur protobuf in, durch plmpl abgekapselte Klassen in eine static lib gepackt habe ... aber scheint immer noch keine Lust darauf zu haben 😕

    Eine exakte Fehlermeldung und eine präzise Beschreibug, was du genau vorhast wären hier hilfreich. "keine Lust darauf" ist einen Tick zu vage 😉

    ich habe Static linking aktiviert, aber solange ich das Programm nicht komplett builde scheint es die Dateien nicht mit ein zu binden

    g++ -c -DBUILD_SHARED_LIBS=ON *.c* -I /usr/local/include -lpthread -L/usr/local/lib -lprotobuf -L. -l:../lib/IPCCom.sll
    

    will nicht ohne Protobuf laufen, sobald ich aber eine main.cpp dazu packe und alles zusammen kompiliere kann man die executable auch auf allen anderen Rechnern ohne protobuf ausführen ... ich bin sehr verwirrt.

    Was bedeutet es bei dir wenn du nicht "alles zusammen kompilierst"? Baust du dann eine statische/dynamische Bibliothek oder geht es hier um die Objektdateien (*.o/*.obj)? Bei letzteren wird überhaupt nichts gelinkt. Das geschieht nur beim Erstellen des eigentlichen Programms (und dafür braucht es den Einstiegspunkt in main.cpp) oder einer dynamsichen Bibliothek (.dll/.so) und erst in diesem (letzten) Schritt müssen dann alle Bibliotheken oder Objektdateien, von denen das Programm oder die dynamische Bibliothek abhängig sind, angegeben werden. Bei statischen Bibliotheken sogar auch deren transitive Abhängigkeiten (für ein von lib1.a abhängiges Programm muss z.B. auch lib2.a gelinkt werden, auch wenn das Programm lib2.a selbst nicht verwendet, aber eine Funktion von lib1.a das irgendwo intern tut).

    Die genaue Struktur deines Projekts und die einzelnen Build-Schritte würden hier enorm weiterhelfen.


Log in to reply