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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Kompilierung der C-Codes mit dem gcc und nutzen Sie den C++ - Funktionen, aber Sie verknüpfen die endgültige ausführbare Datei mit g++, weil C++ - Funktionen müssen Sie die C++ standard-Bibliothek:
Alternativ, Sie können versuchen, manuell zu verlinken, die gegen die C++ - Bibliothek mit gcc:
Aber ich würde stick zu verbinden mit g++ da ich nicht sicher bin, ob es setzt andere wichtige link-flags.