Probleme de compilation
88zou
Messages postés
9
Statut
Membre
-
88zou Messages postés 9 Statut Membre -
88zou Messages postés 9 Statut Membre -
Bonjour,
depuis hier j'arrive pas à compiler un programme que j'ai telecharger, c'est le programme de cgen et ccirc: http://www.eecg.toronto.edu/~jayar/s...Cgen/Cgen.html
je travaille sur debian et j'ai gcc 4.1.2
quand je compile j'ai cette erreur :
gcc -c -I. -Dx86_64 -DLinux -DGEN -pedantic -Wall -O3 -o node_splitter.o node_splitter.cpp
fp.h:27: error: declaration of `double log2(double)' throws different exceptions
/usr/include/bits/mathcalls.h:145: error: from previous declaration `double log2(double) throw ()'
fp.h:28: error: declaration of `double exp2(double)' throws different exceptions
/usr/include/bits/mathcalls.h:142: error: from previous declaration `double exp2(double) throw ()'
make: *** [node_splitter.o] Error 1
vous pouvez m'aider SVP ?
merci
//hp.h
#ifndef FLOATINGPOINT_H
#define FLOATINGPOINT_H
#include <math.h>
double log2(double x);
double exp2(double x);
#define rint(x) (((x-floor(x)) < 0.5) ? floor(x) : ceil(x))
double nint(double x); /* in fp.c */
#endif /* FLOATINGPOINT_H */
depuis hier j'arrive pas à compiler un programme que j'ai telecharger, c'est le programme de cgen et ccirc: http://www.eecg.toronto.edu/~jayar/s...Cgen/Cgen.html
je travaille sur debian et j'ai gcc 4.1.2
quand je compile j'ai cette erreur :
gcc -c -I. -Dx86_64 -DLinux -DGEN -pedantic -Wall -O3 -o node_splitter.o node_splitter.cpp
fp.h:27: error: declaration of `double log2(double)' throws different exceptions
/usr/include/bits/mathcalls.h:145: error: from previous declaration `double log2(double) throw ()'
fp.h:28: error: declaration of `double exp2(double)' throws different exceptions
/usr/include/bits/mathcalls.h:142: error: from previous declaration `double exp2(double) throw ()'
make: *** [node_splitter.o] Error 1
vous pouvez m'aider SVP ?
merci
//hp.h
#ifndef FLOATINGPOINT_H
#define FLOATINGPOINT_H
#include <math.h>
double log2(double x);
double exp2(double x);
#define rint(x) (((x-floor(x)) < 0.5) ? floor(x) : ceil(x))
double nint(double x); /* in fp.c */
#endif /* FLOATINGPOINT_H */
A voir également:
- Probleme de compilation
- Breach compilation c'est quoi - Guide
- Erreur de compilation projet ou bibliothèque introuvable - Forum Excel
- Compilation error: expected unqualified-id before '{' token ✓ - Forum C++
- Problème Compilation Dev-C++ - Forum C++
- Must declare a named package because this compilation unit is associated to the named module - Forum Java
6 réponses
log2 est exp sont deux fonctions qui sont déjà déclaré dans math.h, mais avec une signature différente puisqu'elles retourne une exception.
Regarde bien la doc du programme que tu essai de compiler.
http://www.physto.se/~amanda/local/recoos/HTML/usr/include/bits/mathcalls.h.html
où tu vois que tes fonctions sont déclarés via une macro MATHCALL.
Le problème c'est que je n'ai pas ce MATHCALL dans mon gcc (4.6) je te conseil donc de trouver la définition de ce MATHCALL et de voir s'il n'y a pas une macro à définir à la compilation pour éviter de mettre ce throw à la fin.
Regarde bien la doc du programme que tu essai de compiler.
http://www.physto.se/~amanda/local/recoos/HTML/usr/include/bits/mathcalls.h.html
où tu vois que tes fonctions sont déclarés via une macro MATHCALL.
Le problème c'est que je n'ai pas ce MATHCALL dans mon gcc (4.6) je te conseil donc de trouver la définition de ce MATHCALL et de voir s'il n'y a pas une macro à définir à la compilation pour éviter de mettre ce throw à la fin.
oui mais le probleme je suis pas un expert de C donc je comprend pas trop le matchcall dans mon matchcall j'ai sa :
#ifdef __USE_ISOC99
__BEGIN_NAMESPACE_C99
/* Compute base-2 exponential of X. */
__MATHCALL (exp2,, (_Mdouble_ __x));
/* Compute base-2 logarithm of X. */
__MATHCALL (log2,, (_Mdouble_ __x));
__END_NAMESPACE_C99
#endif
mais dans le fp.h j'ai sa
double log2(double x);
double exp2(double x);
#ifdef __USE_ISOC99
__BEGIN_NAMESPACE_C99
/* Compute base-2 exponential of X. */
__MATHCALL (exp2,, (_Mdouble_ __x));
/* Compute base-2 logarithm of X. */
__MATHCALL (log2,, (_Mdouble_ __x));
__END_NAMESPACE_C99
#endif
mais dans le fp.h j'ai sa
double log2(double x);
double exp2(double x);
la macro MATHCALL doit modifier ça __MATHCALL (log2,, (_Mdouble_ __x)); en ça double log2(double)throw();
As tu lu les commentaires en début de fichier mathcalls.h ? Il sont instructifs.
mathcalls.h semble être appelé depuis math.h. Va dans math.h et déroule tout les fichiers qu'il appele jusqu'à trouver sur la définition de MATHCALL.
ou alors, essai cette commande :
grep MATHCALL $(find /usr/include -name "*.h")|grep define
Si ça ne donne rien, tu peux essayer de faire :
gcc -E math.cc -I<les rep à include>|grep include
où dans math.cc tu met juste #include <math.h>
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
As tu lu les commentaires en début de fichier mathcalls.h ? Il sont instructifs.
mathcalls.h semble être appelé depuis math.h. Va dans math.h et déroule tout les fichiers qu'il appele jusqu'à trouver sur la définition de MATHCALL.
ou alors, essai cette commande :
grep MATHCALL $(find /usr/include -name "*.h")|grep define
Si ça ne donne rien, tu peux essayer de faire :
gcc -E math.cc -I<les rep à include>|grep include
où dans math.cc tu met juste #include <math.h>
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
oui j'ai essai de faire sa hier mais le probleme je trouve pas math.c dans mon gcc c'est tres bizzar
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai trouvé, le problème vient de cdefs.h et de la macro _THROW.
essai deux choses : ajoute -fexceptions à la ligne de compilation. Si ça ne donne rien ajoute -U__GNUC__
Si ça ne donne toujours rien, essai de modifier fp.h ainsi :
Tout ça c'est un peu du bricolage, et il risque d'y avoir des problèmes à l'édition des liens.
essai deux choses : ajoute -fexceptions à la ligne de compilation. Si ça ne donne rien ajoute -U__GNUC__
Si ça ne donne toujours rien, essai de modifier fp.h ainsi :
#if !defined __cplusplus double log2(double x); double exp2(double x); #endif
Tout ça c'est un peu du bricolage, et il risque d'y avoir des problèmes à l'édition des liens.
merci beaucoup ça marche avec -U_GNUC_
désoler si j'abuse mais j'ai encore besoin de toi pour un truc apres avoir complier cgen je dois complier ccrisc mais j'ai ça comme erreur :
gcc -c -I. -Wall -pedantic -o circuit.o circuit.cpp
symbol_table.h:44: error: specialization of `template<class _Key> struct __gnu_cxx::hash' in different namespace
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/ext/hash_fun.h:71: error: from definition of `template<class _Key> struct __gnu_cxx::hash'
make: *** [circuit.o] Error 1
tu peux m'aider sur sa aussi stp ?
désoler si j'abuse mais j'ai encore besoin de toi pour un truc apres avoir complier cgen je dois complier ccrisc mais j'ai ça comme erreur :
gcc -c -I. -Wall -pedantic -o circuit.o circuit.cpp
symbol_table.h:44: error: specialization of `template<class _Key> struct __gnu_cxx::hash' in different namespace
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/ext/hash_fun.h:71: error: from definition of `template<class _Key> struct __gnu_cxx::hash'
make: *** [circuit.o] Error 1
tu peux m'aider sur sa aussi stp ?