Eine C++-Funktion in ein C-Programm einbinden



  • Moin, Moin...

    Ich schreibe ein Programm in C (unter Unix mit gcc) und muss eine Bibliothek einbinden, die in C++ geschrieben wurde. Nun meldet der Linker immer einen Fehler, obwohl die Bibliothek eingebunden wird. Es gibt ja Unterschiede zwischen C und C++ bezüglich des Formats der Funktionsnamen in den Objektdateien. Wenn ich ein C++-Programm erstelle und eine C-Funktion einbinden möchte, so deklariere ich die Funktion ja als eine C-Funktion:

    extern "C" int foo();
    

    Geht auch der umgekehrte Weg? In einem C-Programm eine C++-Funktion deklarieren?

    z.B.

    extern "C++" int foo();
    

    (So geht es nicht)

    Wenn nicht, wie mache ich dem Linker klar, das er eine C++-Funktion zum C-Programm binden soll?

    Danke im voraus...



  • Du machst unterm Strich ein C++-Programm und klemmst die Teile, die in C geschrieben sind hier rein:

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    ...
    
    #ifdef __cplusplus
    }
    #endif
    


  • @Bitsy:

    Herzlichen Dank für die Info. Leider bin ich nicht weitergekommen. Ich habe vier Dateien:

    foo1.c, foo2.c, foo3.c und main.c

    Nur in main.c wird eine Funktion aufgerufen, die aus einer Bibliothek stammt, die in C++ geschrieben ist. Ich habe die obigen Zeilen

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    ...
    
    #ifdef __cplusplus
    }
    #endif
    

    in alle Dateien eingefügt und die Endungen auf .cc geändert. Egal welche Kombinationen und Varianten ich verwende, stets meckert der Linker rum.

    Ich bin mit meinem Latein am Ende... 😞



  • Das ist schon merkwürdig. Versuche es nochmal anders. Reduziere main.cc auf
    main selbst, verwende dort das extern C selbst nicht, sondern nur in den
    Headern der foo-Dateien, sodass er wirklich gezwungen wird in C++ zu übersetzen.
    Du musst es zuerst einmal schaffen, dass er nicht den Aufruf der Library, sondern - wenn überhaupt - den Aufruf Deiner C-Funktionen anmeckert.


Anmelden zum Antworten