GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aufrufen von C-Funktionen in C++, C++-Funktionen in C (C und C++ mischen)

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

hinzu
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

Die obige Ausgabe zeigt, dass die C++-Funktion erfolgreich aus C-Code aufgerufen wurde.


Linux
  1. So erstellen und rufen Sie Funktionen in Bash auf

  2. So kompilieren und installieren Sie Software aus dem Quellcode unter Linux

  3. So erstellen Sie Linux-Makros und Funktionstastenbelegungen in der .intputrc-Datei

  4. Wie kann man eine ausführbare Linux-Datei zerlegen, ändern und dann wieder zusammensetzen?

  5. Rufen Sie eine C-Funktion aus C++-Code auf

So kompilieren Sie C, C++ und Java mit Terminal unter Linux

So kompilieren und führen Sie C- und C++-Programme unter Linux aus

So beheben Sie den Aufruf der undefinierten Funktion apc_fetch() – PHP Fatal Error [Gelöst]

Wie rufe ich eine Bash-Funktion in einem Bash-Skript in Awk auf?

So fügen Sie dem VS-Code einen SSH-Schlüssel hinzu und stellen eine Verbindung zu einem Host her

Wie kann ich C++-Code profilieren, der unter Linux ausgeführt wird?