[C++/Qt] erreur de librairie time.h

erreur de librairie time.h [C++/Qt] - C++ - Programmation

Marsh Posté le 19-01-2005 à 11:19:58    

Lut all,
 
j'ai un problème de librairie, et plus précisement "time.h".  
 
je suis sur débian, mon gcc :
"Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.4/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.4 (Debian 1:3.3.4-13)"
 
 
Mon erreur de compilation:
"/usr/include/pthread.h:651: error: type specifier omitted for parameter `clockid_t'
/usr/include/pthread.h:651: error: parse error before `*' token
/usr/include/c++/3.3/ctime:66: error: `clock_t' not declared
/usr/include/c++/3.3/ctime:67: error: `time_t' not declared
/usr/include/c++/3.3/ctime:68: error: `tm' not declared
..."
 
Mon makefile :
(...)
unix {
  LIBS  += -L../../aethera -L../../tino -L/usr/local/lib -laethera -lkore -ltino -ltkcbase -lldap -llber
  contactsplugin.path   = $$AETHERA_DIR/plugins/
contactsplugin.files  = lib*.so.1.0.0
INSTALLS             += contactsplugin
(...)
 
Je sais très bien que je ne vais pas pouvoir être assez précis, mais par quoi puis-je commencer à vérifier? est ce que quelqu'un à déja eu ce genre de pb?  
 
Mais vraiment toutes les idées sont la bienvenue, je suis bloqué depuis quelques jours et j'en ai maaaarre  :fou:  :bounce: ...
 
 :D  
 
merci à tous

Reply

Marsh Posté le 19-01-2005 à 11:19:58   

Reply

Marsh Posté le 19-01-2005 à 11:40:40    

Tu includes "time.h" ou bien "sys/time.h" ?  
Et tu inclues "sys/types.h" avant ou pas ?

Reply

Marsh Posté le 19-01-2005 à 11:54:37    

Lam's a écrit :

Tu includes "time.h" ou bien "sys/time.h" ?  
Et tu inclues "sys/types.h" avant ou pas ?


 
En fait j'inclue rien du tout, c juste une histoire de dépendance...
 
In file included from /usr/include/c++/3.3/i486-linux/bits/gthr-default.h:37,
                 from /usr/include/c++/3.3/i486-linux/bits/gthr.h:98,
                 from /usr/include/c++/3.3/i486-linux/bits/c++io.h:37,
                 from /usr/include/c++/3.3/bits/fpos.h:44,
                 from /usr/include/c++/3.3/bits/char_traits.h:46,
                 from /usr/include/c++/3.3/string:47,
                 from /usr/share/qt333/include/qstring.h:56,
                 from /usr/share/qt333/include/qwindowdefs.h:44,
                 from /usr/share/qt333/include/qwidget.h:42,
                 from /usr/share/qt333/include/qframe.h:42,
                 from /usr/share/qt333/include/qlineedit.h:47,
                 from acldapconfigdialog.cpp:41:
 
 
et gthr-default.h appel pthread.h qui inclue #include <time.h>
 
existe t'il un moyen de vérifier si il utilise bien le /usr/include/time.h ??? et pas le /sys/time.h?
 
alalaaa, je ne vais jamais trouver ...   :cry:

Reply

Marsh Posté le 19-01-2005 à 12:05:13    

Et ben dans ton code (dans acldapconfigdialog), essaye d'include <sys/types.h> et aussi <sys/time.h> si ça ne marche pas. Si ça ne marche toujours pas, inclus "time.h" en premier, avant tout autre chose.
 
Apparemment, le support du multi-threading dans les allocateurs de la lib std++ est en conflit avec le code de QT. Probablement parce que QT inclut des fichiers systèmes qui ne sont pas les même que ceux inclus par libstdc++ (l'éternel conflit entre time.h et sys/time.h)

Reply

Marsh Posté le 19-01-2005 à 12:11:57    

Lam's a écrit :

Et ben dans ton code (dans acldapconfigdialog), essaye d'include <sys/types.h> et aussi <sys/time.h> si ça ne marche pas. Si ça ne marche toujours pas, inclus "time.h" en premier, avant tout autre chose.
 
Apparemment, le support du multi-threading dans les allocateurs de la lib std++ est en conflit avec le code de QT. Probablement parce que QT inclut des fichiers systèmes qui ne sont pas les même que ceux inclus par libstdc++ (l'éternel conflit entre time.h et sys/time.h)


 
 
Merci pour ta rapidité de réponse, j'avais déja essayé mais sans succès. Je pense aussi que le multi-threading (std) pose problème...
 
En fait, je voudrais utiliser l'API ldap C++ fournit dans Openldap dans le projet "aethera". Lorsque je fais un projet indépendant C++/Qt, je peu utiliser l'api sans problème...
 
 :pfff: :cry:  :fou:

Reply

Marsh Posté le 19-01-2005 à 12:24:43    

Bon, bah fais péter:
- la ligne de commande qui est exécutée pour compiler ce fichier,  
- ainsi que la liste de tes includes dans le fichier cpp,  
- et si c'est pas trop gros, le résultat de  
  g++ -M acldapconfigdialog.cpp (ou -MM)

Reply

Marsh Posté le 19-01-2005 à 14:13:03    

Lam's a écrit :

Bon, bah fais péter:
- la ligne de commande qui est exécutée pour compiler ce fichier,  
- ainsi que la liste de tes includes dans le fichier cpp,  
- et si c'est pas trop gros, le résultat de  
  g++ -M acldapconfigdialog.cpp (ou -MM)


 
- la ligne de commande qui est exécutée pour compiler ce fichier,:
 
g++ -c -pipe -Wall -W -O2 -D_REENTRANT -fPIC  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -I/usr/share/qt333/mkspecs/default -I. -I/usr/local/include/tkcbase -I/usr/local/include/tkcssl -I. -I../.. -I../../.. -I../../clientskel -I../../aethera -I../../../src -I../../tino -I../../plugins/kommailplugin -I/usr/share/qt333/include -I.moc/ -o .obj/acldapconfigdialog.o acldapconfigdialog.cpp
 
ainsi que la liste de tes includes dans le fichier cpp :
//librairie qt:
#include <qlineedit.h>
#include <qcheckbox.h>
#include <qspinbox.h>
#include <qtabwidget.h>
#include <qpushbutton.h>
#include <qbuttongroup.h>
//librairie pour integrer d'autre interface dans celle ci
#include "acldapgeneralconfigwidget2.h"
#include "acldapsecurityconfigwidget.h"
 
#include <acldapconfigdialog.h>
#include <accountinfoconfigwidget.h>
#include <acldapscandialog.h>
 
//using namespace std; //ne change rien
 
le résultat de "g++ -M acldapconfigdialog.cpp (ou -MM)":
 
g++ -M acldapconfigdialog.cpp -->
acldapconfigdialog.cpp:41:23: qlineedit.h: No such file or directory
acldapconfigdialog.cpp:42:23: qcheckbox.h: No such file or directory
acldapconfigdialog.cpp:43:22: qspinbox.h: No such file or directory
acldapconfigdialog.cpp:44:24: qtabwidget.h: No such file or directory
acldapconfigdialog.cpp:45:25: qpushbutton.h: No such file or directory
acldapconfigdialog.cpp:46:26: qbuttongroup.h: No such file or directory
In file included from acldapconfigdialog.cpp:50:
acldapgeneralconfigwidget2.h:13:22: qvariant.h: No such file or directory
acldapgeneralconfigwidget2.h:14:21: qwidget.h: No such file or directory
In file included from acldapconfigdialog.cpp:51:
acldapsecurityconfigwidget.h:13:22: qvariant.h: No such file or directory
acldapsecurityconfigwidget.h:14:21: qwidget.h: No such file or directory
acldapconfigdialog.cpp:53:32: acldapconfigdialog.h: No such file or directory
acldapconfigdialog.cpp:54:37: accountinfoconfigwidget.h: No such file or directory
acldapconfigdialog.cpp:55:30: acldapscandialog.h: No such file or directory
 :??:  
 
g++ -MM acldapconfigdialog.cpp -->
acldapconfigdialog.o: acldapconfigdialog.cpp acldapgeneralconfigwidget2.h \
  acldapsecurityconfigwidget.h
 
 
Mais en fait je ne comprend plus, même en supprimant toutes les traces de cette API , en revenant à mon prog de départ en fait, il me sort la même erreur...
 
franchement merci pour ton aide  ;) c super cool
 
 

Reply

Marsh Posté le 19-01-2005 à 16:07:13    

pleaaaase heeelp...

Reply

Marsh Posté le 19-01-2005 à 16:33:05    

Bon, déjà, je vois pas les options qui indiquent à gcc qu'il va compiler du code multithread.
Essaye donc d'ajouter "-pthread" en option de compil.
 
D'autre part, qu'est-ce qui se passe (quels sont les messages d'erreur) si tu inclues ça en tout premier:
#include <ctime>
 
Pour le reste, faudra attendre que des linuxiens passent par là ce soir...

Reply

Marsh Posté le 19-01-2005 à 16:55:20    

Lam's a écrit :

Bon, déjà, je vois pas les options qui indiquent à gcc qu'il va compiler du code multithread.
Essaye donc d'ajouter "-pthread" en option de compil.
 
D'autre part, qu'est-ce qui se passe (quels sont les messages d'erreur) si tu inclues ça en tout premier:
#include <ctime>
 
Pour le reste, faudra attendre que des linuxiens passent par là ce soir...


 
Toujours rien :(...
J'ai bien ajouté -pthread et la lib ctime mais aucun signe de mieu sniiiif.
 
L'erreur 1° de pthread (/usr/include/pthread.h l.651):
 

Code :
  1. #ifndef _PTHREAD_H
  2. #define _PTHREAD_H      1
  3. (...)
  4. #include <time.h>
  5. (...)
  6. #ifdef __USE_XOPEN2K
  7. /* Get ID of CPU-time clock for thread THREAD_ID.  */
  8. //l.651: type specifier omitted for parameter `clockid_t'
  9. extern int pthread_getcpuclockid (pthread_t __thread_id,
  10.                                   clockid_t *__clock_id) __THROW;
  11. #endif

 
   
L'erreur 2° de ctime  (/usr/include/c++/3.3/ctime l.68->78)
 

Code :
  1. #ifndef _CPP_CTIME
  2. #define _CPP_CTIME 1
  3. #include <time.h>
  4. // Get rid of those macros defined in <time.h> in lieu of real functions.
  5. #undef clock
  6. #undef difftime
  7. #undef mktime
  8. #undef time
  9. #undef asctime
  10. #undef ctime
  11. #undef gmtime
  12. #undef localtime
  13. #undef strftime
  14. namespace std
  15. {
  16.   using ::clock_t;
  17.   using ::time_t;
  18.   using ::tm;
  19.   using ::clock;
  20.   using ::difftime;
  21.   using ::mktime;
  22.   using ::time;
  23.   using ::asctime;
  24.   using ::ctime;
  25.   using ::gmtime;
  26.   using ::localtime;
  27.   using ::strftime;
  28. }


 
Mais bon, normalement on a quasi tous les mêmes lol.
 
J'ai installer la version libstdc++6 au cas ou ca soit le pb...
J'espère que les linuxiens expérimentés vont trouvés mon pb, mais j'en doute pas :)
 
merci bcp
 

Reply

Marsh Posté le 19-01-2005 à 16:55:20   

Reply

Marsh Posté le 24-01-2005 à 09:52:34    

C'est bon j'ai trouver ma première erreur en faisant du trie dans mes librairies... Il y avait une librairie rebelle héhé
 
Merci Lam's pour ton aide :hello:

Reply

Sujets relatifs:

Leave a Replay

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