Wie benutzt man extern "C" um C ++ Funktionen in C aufzurufen

8

Also habe ich etwa ein Dutzend Seiten gelesen, die erklären, wie man das macht, und für mein Leben kann ich es nicht zum Laufen bringen.

Ich habe eine in C ++ geschriebene Bibliothek und einen in C geschriebenen Code, der mit dem gnu-Compiler kompiliert wird, und ich kann den C ++ - Code einfach nicht von C aus aufrufen.

Ich habe eine Bibliothek in C ++ geschrieben:

printHeadOO.hpp

%Vor%

printSrcOO.cpp

%Vor%

Okay cool, wenn ich das von einem C ++ Programm aus anrufe, kompiliert es, läuft und alles ist glücklich. Aber nehmen wir an, ich rufe es stattdessen von einem C-Programm:

printMain.c

%Vor%

also alles kompiliert gut mit:

%Vor%

aber dann bei Link-Zeit:

%Vor%

gcc nimmt Folgendes auf:

%Vor%

Wie bekomme ich g ++ um Hooks zu erstellen, die gcc benutzen wird? Mache ich gerade etwas Dummes / vermisse etwas?

TIA Dan

    
user1892929 10.12.2012, 22:08
quelle

1 Antwort

9

Sie können Ihren C-Code mit gcc kompilieren und diese C ++ - Funktionen verwenden, aber Sie müssen die endgültige ausführbare Datei mit g ++ verknüpfen, da die C ++ - Funktionen die C ++ - Standardbibliothek benötigen:

%Vor%

Alternativ können Sie versuchen, manuell mit der C ++ - Bibliothek mit gcc:

zu verknüpfen %Vor%

Aber ich würde bei der Verknüpfung mit g ++ bleiben, da ich nicht sicher bin, ob es andere wichtige Link-Flags setzt.

    
Nikos C. 10.12.2012, 22:15
quelle

Tags und Links

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '373245',
    'url' => 'how-do-you-use-extern-c-to-call-c-functions-in-c',
];

$_COOKIE = [
    'advanced-frontend' => '8a9a7990ef617c7e076737d5f9902ca6',
    '_csrf-frontend' => 'd4aa28f16e7e8b0085e42e568e6dad3f97f6749e3b22a686ded355bc278e0554a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"36qUYWT8vWWX2yjkXW7EGcLSfNx44L6Y";}',
];

$_SESSION = [
    '__flash' => [],
];