Utilisation de la librairie standard du C++ aevc pgf90

Utilisation de la librairie standard du C++ aevc pgf90 - C++ - Programmation

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
 

Reply

Marsh Posté le 17-11-2004 à 10:11:02   

Reply

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()

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed