paranoia

  • ich werd noch mal bleede mit die sch...


    Ausgangslage :
    ich hab cdparanoia 10.3 als quellen installiert, übersetzt und lüppt auch alles


    ich hab ein kleines beispiel c-prog und linke das gegen cdparanoia - klappt auch.


    Soweit so gut und hier kommt das Problem:


    ich hab eine inzwischen total gestrippte Kopie des c-progs als *.cpp und angepasste Makefiles, bzw übersetze inzwischen (fast) von Hand.


    Das "programm" (lt.cpp) sieht so aus:


    Das Thema "linphone" dient mir nur zur Kontrolle - das Problem habe ich nur mit cdda_interface (cdparanoia)


    Es passieren jetzt im Wechsel 2 Dinge :


    wenn ich bei der Übersetzung (g++) des .cpp "-shared" angebe, bekomme ich ein executeable, welches beim Start "segfault produziert" - egal, was noch im "Programm" verbleibt - und sei es nur "printf("Hello world\n");


    wenn ich das weglasse, dann bekomme ich beim linken unresolved symbol für cdda_identify. Die Libs für cdparanoia liegen am gleichen Platz wie die für linphone (das dient mir der Kontrolle) - ebenso die Includes - das hinzubinden der linphone-lib funktioniert 1a!


    Zusammenfassung :


    ich habe Probleme die shared-libs von cdparanoia aus einem c++-Prog zu nutzen und keine Ahnung, woran es liegt - es muß zumindest auch an cdparanoia liegen, da ja lin* funzt. ich kann mit sicherheit sagen, daß cdda_identify Bestandteil von libcdda_interface ist, und daß die Lib am selben Platz liegt, wie liblin*


    bin für jede (auch noch so blöde) idee dankbar, mache nämlich schon Tage dran rum.

  • C-APIs in C++ sollten immer wie folgt eingebunden werden (viele Bibliotheken machen das heutzutage per ifdef cplusplus - aber nicht alle).


    C
    extern "C" {
    #include <c-header.h>
    }


    Für Hintergründe suche nach name mangling und calling conventions. Während ersteres für die Linkerfehler sorgt, bringt zweiteres die Segfaults, oder noch schlimmer.


    EDIT:
    Ok, doch noch ein wenig Hintergrund: In den Headern von linphone wird vermutlich so etwas gemacht:



    Das sorgt dafür, dass - wenn dieser Header in C++ benutzt wird - automatisch alles durch extern "C" eingeschlossen wird. cdparanoia hat sowas vermutlich nicht drin.

  • wenn du recht hast, dann hast du dir nen Bier verdient - musst mir nur sagen wohin ich das schicken soll... heute Abend wird es sich zeigen

  • Ohne -shared tuts - mit -shared segfaulted das Teil - so ganz hab ichs noch nicht kapiert.


    Trotzdem : Wohin soll das Bier;-)

Jetzt mitmachen!

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