Es gibt Zeiten, in denen es erforderlich ist, C- und C++-Code miteinander zu mischen. Wenn Sie beispielsweise einen Legacy-C-Code oder eine bestimmte C-Bibliothek verwenden, stellt das Ihren C++-Code mit einigen spezifischen Funktionen bereit. Daher müssen einige spezielle Schritte beachtet werden, wenn C-Code in einer C++-Datei oder umgekehrt verwendet wird.
Dieser Artikel behandelt anhand einiger Beispiele die Schritte, die zum Mischen von C/C++-Code erforderlich sind.
1. Aufruf von C-Funktionen aus C++
In diesem Abschnitt besprechen wir, wie C-Funktionen aus C++-Code aufgerufen werden.
Hier ist der C-Code (Cfile.c):
#include <stdio.h> void f(void) { printf("\n This is a C code\n"); }
Der erste Schritt besteht darin, eine Bibliothek dieses C-Codes zu erstellen. Die folgenden Schritte erstellen eine gemeinsam genutzte Bibliothek:
$ gcc -c -Wall -Werror -fPIC Cfile.c $ gcc -shared -o libCfile.so Cfile.o
Die gemeinsam genutzte Bibliothek libCfile.so wird als Ergebnis der beiden obigen Befehle erstellt.
Hier ist der C++-Hauptcode (main.cpp):
#include <iostream> extern "C" { void f(); } void func(void) { std::cout<<"\n being used within C++ code\n"; } int main(void) { f(); func(); return 0; }
Die C-Funktion f() wird in der Notation extern „C“ deklariert, um dem cpp-Compiler mitzuteilen, dass sie eine C-Typ-Verknüpfung hat.
Kompilieren Sie nun den Code (stellen Sie sicher, dass die gemeinsam genutzte Bibliothek libCfile.so mit dem Code verknüpft ist):
$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile
Stellen Sie vor dem Ausführen der ausführbaren Datei sicher, dass der Pfad der gemeinsam genutzten Bibliothek in der Umgebungsvariable LD_LIBRARY_PATH.
enthalten ist$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Führen Sie nun die ausführbare Datei „main“ :
aus$ ./main This is a C code being used within C++ code
Wir sehen also, dass eine C-Funktion erfolgreich von einem C++-Code aufgerufen wurde.
Lesen Sie dies auch für detaillierte Informationen zum Erstellen gemeinsam genutzter Bibliotheken unter Linux.
2. Aufruf von C++-Funktionen aus C
In diesem Abschnitt besprechen wir, wie C++-Funktionen aus C-Code aufgerufen werden.
Hier ist ein C++-Code (CPPfile.cpp):
#include <iostream> void func(void) { std::cout<<"\n This is a C++ code\n"; }
Wir werden sehen, wie die Funktion func() aus einem C-Code heraus aufgerufen werden kann.
Der erste Schritt dazu besteht darin, die Deklaration/Definition dieser Funktion zu ändern, indem die Notation extern „C“ eingeführt wird.
#include <iostream> extern "C" void func(void) { std::cout<<"\n This is a C++ code\n"; }
Der nächste Schritt besteht darin, aus dem obigen Code eine Bibliothek zu erstellen. Die folgenden Schritte erstellen eine gemeinsam genutzte Bibliothek:
g++ -c -Wall -Werror -fPIC CPPfile.cpp $ g++ -shared -o libCPPfile.so CPPfile.o
Die obigen Befehle sollten zu einer gemeinsam genutzten Bibliothek libCPPfile.so führen.
Hier ist der Hauptcode in C-Sprache (main.c):
#include <stdio.h> extern void func(void); void f(void) { printf("\n being used within C code\n"); } int main(void) { func(); f(); return 0; }
Bitte beachten Sie, dass die C++-Funktion hier als extern deklariert ist.
Kompilieren Sie den C-Code (main.c) wie folgt:
gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile
und fügen Sie den aktuellen Verzeichnispfad zur Umgebungsvariable LD_LIBRARY _PATH
hinzuexport LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Führen Sie nun die ausführbare Datei „main“ :
aus$ ./main This is a C++ code being used within C code
Die obige Ausgabe zeigt, dass die C++-Funktion erfolgreich aus C-Code aufgerufen wurde.