Wie verwenden Sie extern "C" zum Aufruf von C++ Funktionen in C

So, die ich gelesen habe über ein Dutzend Seiten erklären, wie dies zu tun, und für das Leben von mir ich kann nicht ankommen es zu wirken.

Ich habe eine library in C++ geschrieben, und eine Reihe von code, die in C geschrieben sind, die compiliert mit dem gnu-compiler, und ich kann einfach nicht scheinen, um der Lage sein, den C++ - code von C.

Habe ich eine Bibliothek geschrieben in C++:

printHeadOO.hpp

#ifdef __cplusplus
extern "C" 
#endif

void printThis(void);

printSrcOO.cpp

#include "printHeadOO.hpp"
#include <iostream>

void printThis(void){
    std::cout<<"This is Printed Using C++ \n";
}

okay cool, wenn ich rufe, das aus einem C++ - Programm kompilieren, läuft und alles freut sich. Aber nehmen wir an, stattdessen nenne ich es von einem C-Programm:

printMain.c

#include <stdio.h>
#include "printHeadOO.hpp" 

int main(void){
    printf("This is printed from C Main \n");
    printThis();

    return 0;   
}

also alles kompiliert einwandfrei mit:

#g++ -c printSrcOO.cpp
#gcc -c printMain.c

aber dann in der link-Zeit:

#gcc printSrcOO.o printMain.o -o myProgram

gcc yaks die folgenden:

printSrcOO.o: In function `__static_initialization_and_destruction_0(int, int)':
printSrcOO.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
printSrcOO.o: In function `__tcf_0':
printSrcOO.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
printSrcOO.o: In function `printThis':
printSrcOO.cpp:(.text+0x83): undefined reference to `std::cout'
printSrcOO.cpp:(.text+0x88): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
printSrcOO.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Wie bekomme ich g++ zu erstellen, Haken, gcc verwenden? Bin ich nur etwas dumm/fehlt etwas?

TIA
Dan

InformationsquelleAutor user1892929 | 2012-12-10
Schreibe einen Kommentar