Comment dire à gcc d'aller chercher les .h dans un répertoire ?

Comment dire à gcc d'aller chercher les .h dans un répertoire ? - C - Programmation

Marsh Posté le 12-03-2006 à 18:53:40    

Edit : le problème initial s'est transformé en celui de dire à gcc d'aller chercher les fichiers .h dans un répertoire spécifique (voir plus loin). Désolé de faire comme ceci mais ça ne valait pas la peine de refaire un nouveau post. J'espère que vous saurez m'aider car je suis vraiment nul. Merci d'avance
 
Salut à tous,
 
j'ai un drôle de problème concernant une table de hachage créée par hcreate. J'aurais vraiment besoin de votre aide. Premièrement, est-ce que qqun aurait un exemple utilisant hcreat_r et hsearch_r car j'aimerais jouer sur deux tables. Deuxièmement je ne parviens pas à voir comment faire pour agrandir la table quand celle-ci est pleine. Et troisièmement, le plus drole des problèmes est qu'il a l'air de me looper des recherches de clés ... En fait je lis dans un fichier des mots, il se peut que le même mot revienne plusieurs fois. J'aimerais attribuer un index à chaque mot différent et pour ce faire je dis que la clé dans ma table est le mot (chaine de caractères) et la donnée est l'index.
 
Un premier problème est de gérer la taille de la table car je ne connais pas à l'avance le nombre de mot différent. Est-ce que qqun saurais me dire comment on fait pour aggrandir la table ? Est-ce qu'il suffit de refaire hcreate (X) ? si oui, X est la taille globale de la table ou bien on a rajouté X à la table existant ? Un deuxième problème est que suivant la taille de la table que je lui donne au départ (j'ai abandonné l'idée de l'aggrandir) il a l'air de se gourer dans les recherches des clés. Je m'explique, par exemple, quand je fais une table de 10 éléments par hcreate(10) il parvient à en mettre plus que 10 dedans mais ne met pas nécessairement les 10premiers qu'il a trouvé dans le fichier (les 10 différents). Tandis que quand je lui dis de faire une taille 1000 par exemple là il en oublie 3 (sur les 36 mots différents que j'ai dans le texte). Il y a l'air qu'il fait comme si le mot est déjà dedans mais ce n'est pas le cas ... Ca fait des heures que je tente de comprendre pourquoi et c'est la raison qui me pousse à vous demander un petit exemple d'utilisation (ne me donner pas celui dans man hcreate car je me suis basé sur lui pour faire mon prog et ça va pas).
 
Et si qqun sait se servir de hcreate_r et hsearch_r c'est encore mieux, surtout pour m'expliquer ce qu'est l'argument **ret.
 
Voici une esquisse de mon prog, c'est juste une esquisse, je n'écris que ce qui est utilise, par ex dans main() je note pas les bazards avec arg, c'est fait exprès ...
 

Code :
  1. int main(){
  2. int count = 0;
  3. ENTRY item, *p_item;
  4. char mot[100];     //les mots sont plus petits que 100caractères.
  5. hcreate(100);
  6. while(scanf(file, %s, mot)!=EOF){
  7. item.key = mot;
  8. item.data = count+1;
  9. pitem = hsearch(item, FIND);    //Juste pour voir si est dans la table et si faut augmenter count
  10. if(pitem==NULL){ 
  11. count++;
  12. //on augmente le count pour le prochain mot vu que le courant n'est pas dans la table.
  13. }
  14. pitem = hsearch(item, ENTER);   //Si n'est pas dans la table, le rajoute (action ENTER)
  15. if(pitem == NULL){
  16. //La table est pleine mais je ne sais pas comment faire pour l'agrandir.
  17. }
  18. }
  19. }


Message édité par Flitz le 13-03-2006 à 19:07:48
Reply

Marsh Posté le 12-03-2006 à 18:53:40   

Reply

Marsh Posté le 12-03-2006 à 20:41:20    

c'est nul et pas réentrant. essaie la glib

Reply

Marsh Posté le 12-03-2006 à 22:14:28    

Taz a écrit :

c'est nul et pas réentrant. essaie la glib


 
merci de ta réponse
 
beh en fait les versions _r sont réentrante mais as-tu des suggestions plus précises pour glib car en fait je suis pas très connaisseurs dès que ça sort un peu du cadre classique.

Reply

Marsh Posté le 13-03-2006 à 12:05:43    

gtk.org -> Glib -> API reference

Reply

Marsh Posté le 13-03-2006 à 16:41:49    

Taz a écrit :

gtk.org -> Glib -> API reference


 
Bien ! j'ai la glib sur mon pc mais pas moyen de s'en servir, je commence à péter un cable, ça fait toute l'aprem que j'essaie d'installer tout ça.
 
J'ai beau réinstaller glib 2.6.3.5 avec yast dans suse (il l'était déjà), pas moyen de m'en servir. Je m'explique. Déjà je ne trouve rien dans le répertoire include concernant la glib, par contre tout se trouve dans /opt/gnome/include/glib-2.0/. Là je trouve bien le glib.h mais quand je l'inclus dans mon fichier source avec #include </.../glib.h> où les trois petits points sont tout le chemin d'accès, là il prend en compte le fichier mais j'ai un floppée d'erreurs mais ces erreurs sont carrément dans les fichiers sources de la bibliothèque. C'est quoi ce problème, j'en ai presque envie de pleurer tellement je patauge.
 
Please help.
 
edit : je suis en KDE et mes fichiers .h des bibliothèques sont dans /usr/include/ mais pas la glib, pas moyen de m'en servir ...
 
edit 2 : bon en gros le problème c'est qu'il faudrait que j'inclues tous les fichiers h nécessaires à la main avec leur chemin complet ... bref galère, comment est-ce que je pourrais faire pour simplement avoir à faire un #include <glib.h> et qu'il trouve tous les fichiers que ce .h spécifie tout seul comme un grand ?
 
merci d'avance


Message édité par Flitz le 13-03-2006 à 16:50:06
Reply

Marsh Posté le 13-03-2006 à 16:52:08    

option -I du cpp
 
man gcc

Reply

Marsh Posté le 13-03-2006 à 16:53:18    

je suis vraiment nul, désolé mais je n'arrive pas à trouver le ".a" requis. Je ne trouve rien (par recherche) en rapport avec glib.
 
Est-ce que je pourrais aussi spécifier avec -L le répertoire ou aller voir ? si oui que devrais-je spécifier dans mon include ?
 
Edit : bon comme d'hab je n'arrive à rien. J'aurais besoin d'un petit coup de main. En gros mon projet est dans "/home/flitz/Compilateur/travail/code/src", il est compilé par un makefile qui se trouve dans src donc ça compile par "gcc -Wall analyse.c grammar.c -o". J'ai copié le répertoire glib-2.0 dans src. Bref dans le même répertoire que le Makefile et les sources de mon projet. J'aimerais dire à gcc d'aller rechercher les fichiers h qu'il lui faut dans /glib-2.0 qui est dans mon src mais je ne parviens pas à le faire. Que dois écrire  dans gcc et que dois je inclure dans mon grammar.c pour qu'il prenne glib.h et tous les fichiers dont il aura besoin (le tout est je le rappelle copié dans /glib qui est dans mon répertoire du projet qui contient les sources).
 
J'espère que qqun pourra m'aider car je suis vraiment nul et je commence à perdre patience.
 
Merci d'avance


Message édité par Flitz le 13-03-2006 à 18:18:28
Reply

Marsh Posté le 13-03-2006 à 19:26:53    


-I/glib-2.0
 
avec ca le preprocesseur trouvera les headers
 
apres pour les binaire tu lui indiques le chemin avec -L (meme syntaxe que -I) si il n'est pas dans LD_LIBRARY_PATH et -lglib par exemple (ca doit etre indiqué dans la doc de la glib)
 
ces options sont documenté dans le manuel de gcc

Reply

Marsh Posté le 13-03-2006 à 19:36:53    

skelter a écrit :

-I/glib-2.0
 
avec ca le preprocesseur trouvera les headers
 
apres pour les binaire tu lui indiques le chemin avec -L (meme syntaxe que -I) si il n'est pas dans LD_LIBRARY_PATH et -lglib par exemple (ca doit etre indiqué dans la doc de la glib)
 
ces options sont documenté dans le manuel de gcc


 
merci de ta réponse !
 
procédons dans l'ordre. Si je note déjà -I/glib ou -I../glib il devrait trouver les header ? cependant j'ai tjrs un sale message du genre "glib.h : aucune fichier de ce type". J'ai tjrs ça quoi que je fasse... Bete question, glib.h se trouve dans le répertoire glib de mon src du projet, est-ce qu'il faut changer qqch dans le include ou bien #include <glib.h> est correct ?


Message édité par Flitz le 13-03-2006 à 19:38:26
Reply

Marsh Posté le 13-03-2006 à 20:01:39    

si les headers sont dans /opt/gnome/include/glib-2.0/
 
-I/opt/gnome/include/glib-2.0/
 
et
 
#include <glib.h>

Reply

Marsh Posté le 13-03-2006 à 20:01:39   

Reply

Marsh Posté le 13-03-2006 à 20:09:41    

skelter a écrit :

si les headers sont dans /opt/gnome/include/glib-2.0/
 
-I/opt/gnome/include/glib-2.0/
 
et
 
#include <glib.h>


 
merci bcp pour tes réponses mais ça ne marche pas du tout !
 
Bon le glib.h il le trouve mais tous les fichiers h que renseigne celui là il ne le trouve pas. J'en ai marre donc je vais poser une derniere question, est-ce que si je récupère tous les fichiers h et c nécessaire et que je les compiles comme si c'était moi qui les avait fait est-ce que ça marchera ?

Reply

Marsh Posté le 13-03-2006 à 21:41:50    

Flitz a écrit :

merci bcp pour tes réponses mais ça ne marche pas du tout !
 
Bon le glib.h il le trouve mais tous les fichiers h que renseigne celui là il ne le trouve pas. J'en ai marre donc je vais poser une derniere question, est-ce que si je récupère tous les fichiers h et c nécessaire et que je les compiles comme si c'était moi qui les avait fait est-ce que ça marchera ?


En théorie oui... mais ton problème traduit un soucis plus profond donc il est possible que ce soucis empêche la compilation...
 
Normallement, quand tu tapes "gcc -I<rep1> -I<rep2> -I<rep3>", chaque fois que le source voit un "#include <toto.h>", il ira chercher "toto.h" dans les répertoires officiels d'include ("/usr/include" ) puis dans "rep1", puis dans "rep2" puis dans "rep3". Si ça ne fonctionne pas, c'est que t'as un soucis plus sérieux.
 
En revanche, s'il y a écrit #include "toto.h" (pas les <> mais les guillemets), alors le compilo ira chercher "toto.h" par rapport à l'endroit où tu te trouves...

Reply

Marsh Posté le 13-03-2006 à 22:32:34    

pour tout les messages du style " : aucune fichier de ce type" verifie l'existence du fichier (et si il est lisible)
 

Reply

Marsh Posté le 14-03-2006 à 06:01:07    

skelter a écrit :

pour tout les messages du style " : aucune fichier de ce type" verifie l'existence du fichier (et si il est lisible)


 
g tout vérifié, merci de tes réponses, ça me fait plaisir mais là j'en ai marre, j'ai tout vérifier, les fichiers existent, g été en root donner tous les droits d'accès, je me suis meme amuser à faire méthode barbare et tout inclure à la main mais non y a des erreurs dans les .o donc j'abandonne, je v réinstaller tout proprement et je verrai bien.
 
merci pour le réponse :jap:  

Reply

Marsh Posté le 14-03-2006 à 10:34:39    

regarde bien la documentation sur la procedure d'installation, et en principe tu dois avoir un repertoire "examples" avec des programmes de tests et un makefile, ca fais deja une bonne base

Reply

Marsh Posté le 16-03-2006 à 17:13:15    

vos gueules bordel ! RTFM
 
gcc $(pkg-config --cflags --libs glib-2.0) machin.c

Reply

Marsh Posté le 16-03-2006 à 21:23:29    

Taz a écrit :

vos gueules bordel


Ah. Je reconnais bien là le Taz auquel j'étais habitué. Chassez le natuel, il revient au galop...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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