Utilisation de la librairie standard du C++ aevc pgf90 - C++ - Programmation
Marsh Posté le 17-11-2004 à 10:30:44
en fait, il semble que ce ne soit pas tant l'affichage d'une valeur qui pose problème que celle d'une chaine de caractère (le "alpha = " ne semble pas accepté dans la ligne d'écriture).
Il faut lire également, à la place des animations :
Carre :: puis2()
Marsh Posté le 17-11-2004 à 10:11:02
Bonjour,
Je continue ma découverte des compilateurs Portland pgf90 et pgCC
Je rencontre un problème lorsque j'ai des fichiers écrit en C++ et fortran 90 à interfacer :
En gros, j'i un programme principal en fortran, qui cherche à calculer la puissance sixième de 2 :
PROGRAM PRINCIPAL
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
INTEGER PUIS6
INTEGER A,B
A = 2
B = PUIS6(A)
END PROGRAM
La fonction puis6 qui doit renvoyer la puissance sixième d'un entrier est écrite ainsi :
#include "Carre.H"
extern "C" int puis6_(int *c)
{
int d;
Carre value(*c);
d = (value.puis2())*(value.puis2())*(value.puis2());
return (d);
}
On crée donc un objet value, de la classe Carre. L'une des méthodes propre à cette classe est " puis2() " qui renvoie la puissance 2 (ie. le carré) de la variable entrée dans le constructeur :
Ainsi Carre.H s'écrit :
#ifndef CARRE_H
#define CARRE_H
class Carre
{
public:
Carre(int a)
{_valeur = a;}
int puis2();
protected:
int _valeur;
};
#endif
et Carre.C :
#include <iostream.h>
#include "Carre.H"
int Carre::puis2()
{
int alpha;
alpha = _valeur*_valeur;
cout << "alpha = " << alpha << endl;
return (alpha);
}
Le problème que je rencontre est ce dernier affichage de la valeur alpha. En effet, je compile successivement par :
pgCC -c *.C
pgf90 -c *.f
pgf90 -O -o principal *.o -lstd -lC -L/usr/local/pgi-3.2/linux86/lib
Le répertoire /usr/local/pgi-3.2/linux86/lib contenant les différentes libraries propre à C++, selon moi.
La compilation s'arrête à l'édition de liens par :
Carre.o: In function `Carre::puis2(void)':
Carre.o(.text+0x38): undefined reference to `std::__ls__tm__30_Q2_3std20char_traits__tm__2_c(std::basic_ostream<char,> &, char const *)'
Il semble donc que la librairie standard du C++ ne soit pas trouvée. Pourtant, si l'affichage d'une valeur par une commande similaire (en cout << ... << endl, s'était fait à l'intérieur de la fonction puis6 et non dans la méthode puis2, la compilation aurait fonctionnée et l'éxécutable pouvait être lancé.
D'où viens ce problème apparemment typique d'une compilation avec pgf90 de fichiers C++.
D'avance merci de votre réponse,
Nathan