2011-08-31 6 views
2

est-il possible d'appeler une fonction C++ de FORTRAN tels queappeler C++ fonction de Fortran pas C

#include <iostream.h> 
extern "C" 
{ 
    void single_cell(void) 
    { 
     cout<<"Hi from C++"; 
    } 
} 

Alors, quand je suis en utilisant C, il fonctionne très bien, mais avec la fonction C++ donne des erreurs comme non définie erreur à cout etc

+0

Vous auriez besoin de 'using namespace std;' ou 'std :: cout' mais je ne pense pas que cela fonctionnera dans un' extern 'C "' –

+1

Je ne sais pas mais peut-être vous devez 'inclure ' et utiliser 'std :: cout', mais je ne sais pas, ça marchera – nirmus

+0

Vous aurez besoin de modifier la question pour expliquer quels compilateurs C++ et fortran vous utilisez et comment vous faites le lien avant que quelqu'un puisse vous donner une réponse définitive . – talonmies

Répondre

3

G ++ et gfortran, utilisés comme lieurs, apportent tous deux des bibliothèques supplémentaires. C'est pourquoi la combinaison Fortran/C++ est plus délicate que la combinaison Fortran/C ... en utilisant juste le compilateur correct car l'éditeur de liens ne fonctionnera pas, vous devez ajouter une librairie. Il est déjà suggéré de lier avec gfortran et de spécifier les bibliothèques d'exécution C++. Vous pouvez également créer un lien avec g ++ et spécifier les bibliothèques d'exécution Fortran. Voir Linking fortran and c++ binaries using gcc pour les détails des deux approches.

+0

g ++ main.o print_hi.o -o main -lgfortran après avoir utilisé cette commande, il donne l'erreur car/cygnus/cygwin-b20/h-i586-cygwin32/i586-cygwin32/bin/1d ne peut pas ouvrir -lgfortran: pas un tel fichier ou directeur quelle est la procédure exacte à inclure le chemin parce que je pense que le gfortran est installé dans un autre répertoire – Zahur

1

En supposant que vous pourriez avoir votre code Fortran appeler dans une fonction C, le problème n'est pas le code, mais plutôt comment vous liez. Lorsque vous liez des objets C++, vous devez également extraire l'environnement d'exécution C++. Si vous utilisez GCC, liez-le avec la commande g ++ et vous obtiendrez les parties dont vous avez besoin.

+1

Lier avec g ++ (et ne rien faire d'autre) aura pour résultat que les bibliothèques d'exécution fortran ne seront pas trouvées. La solution consiste soit à lier avec le compilateur fortran et à ajouter les bibliothèques d'exécution C++ à l'instruction link, soit à lier avec le compilateur C++ et à ajouter les bibliothèques d'exécution fortran à l'instruction link. Les deux vont travailler. – talonmies

+0

@ talonmies oui vous avez raison. Le prblem est dans la phase de liaison et j'utilise les commandes de gfortran donc cela pose problème avec le C++ cout. pouvez-vous donner des détails comment j'inclus les bibliothèques dans la commande de liaison – Zahur

+0

J'utilise Iso_c_binding dans fortran pour appeler cette fonction C++, qui fonctionne bien dans le cas de C mais pas dans le C++ – Zahur