2011-10-12 8 views
1

Quelles sont les causes possibles, que gcc ne lie pas à math.h même si j'ai défini l'indicateur -lm?Math.h introuvable même si `-lm` est défini

[email protected]$ g++ template_gold.cpp -o template_gold -lm 
template_gold.cpp: In function ‘void computeGold(valpoint*, centroid*, int)’: 
template_gold.cpp:68: error: ‘max’ was not declared in this scope 
template_gold.cpp:70: error: ‘abs’ was not declared in this scope 

Je suis désolé, si cela est dupe, mais la recherche des googles et donc j'ai trouvé seul poste suggérant de fixer le -lm.

Offending code

#include <math.h> 
#include "kmeans.h" 
extern "C" 
void computeGold(valpoint* h_idata, centroid* h_centroids, int numClusters); 
... 
for (long valindex = 0; valindex<1024*1024; valindex++) 
    { 
     minDistance = 0xFFFFFFFF; 
     for (k = 0; k<numClusters; k++) 
      if (max((long)(h_idata[valindex].value - h_centroids[k].value))<minDistance) 
      { 
       minDistance = abs((long)(h_idata[valindex].value - h_centroids[k].value)); 
       myCentroid = k; 
      } 

     h_idata[valindex].centroid = h_centroids[myCentroid].value; 

    } 
} 
+0

Dans ce code, vous semblez utiliser «-Im» plutôt que «-lm»? Il devrait être en minuscule L – poundifdef

+0

Pourquoi avez-vous '-Im' dans la ligne de commande plutôt que' -lm'? (Pas que ce soit quelque chose à voir avec vos erreurs de compilation). –

+0

Vous devez poster le code autour des lignes 65 - 75 et aussi montrer ce que #includes vous avez –

Répondre

3

Vous avez probablement oublié d'utiliser std::max, ou vous avez oublié d'ajouter using namespace std. Essayez

void void computeGold(valpoint* ..., centroid* ..., int ...) 
{ 
    using namespace std; /* or using std::max etc. */ 
} 
+0

J'ai ajouté le code incriminé. – Framester

+1

@Framester Ce n'est pas si offensant pour être honnête, même si vous devriez inclure 'cmath' au lieu de' math.h'. – cnicutar

+0

Mow je reçois le error'template_gold.cpp: 69: erreur: 'abs' n'est pas un membre de 'std'' – Framester

Questions connexes