Make file incluant des bibliothèques
Résolu/Fermé
sarah
-
19 févr. 2009 à 11:07
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 févr. 2009 à 00:27
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 févr. 2009 à 00:27
A voir également:
- Make file incluant des bibliothèques
- Host file - Guide
- .Bin file - Guide
- .Dat file - Guide
- Iso file - Guide
- Swf file player - Télécharger - Lecture
10 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
19 févr. 2009 à 11:36
19 févr. 2009 à 11:36
Ce n'est pas un problème spécifique à Makefile mais plutôt à gcc. Il faut que tu précises à gcc ou trouver les headers qui ne sont pas dans un répertoire standard. Ton "algo/blast/core/blast_def.h".
En supposant que ce fichier soit dans /usr/local/pouet/include/algo/blast/core/blast_def.h, il faut passer à gcc l'option :
(tu peux aussi utiliser -isystem). Exemple :
Si le programme plante au linkage, il faut que tu passes en paramètre de gcc le binaire de la librairie en paramètre ou une manière d'y accéder. Tout ce qui suit, contrairement au -I, ne concerne que la compilation de l'exécutable, pas celle des fichiers .o.
- si c'est un .a (librairie statique), elle se passe en paramètre à gcc au même titre qu'un .o au moment de construire l'exécutable
- si c'est un .so (libraire dynamique), par exemple libpouet.so, il faut passer à gcc l'option :
Exemple :
Si de plus la librairie pouet n'est pas dans un répertoire standard (par exemple /usr/local/pouet/lib), il faut lui dire ou la trouver à l'aide des options -Wl,R et -L (s'utilise de la même façon que -I et -isystem, sauf que c'est pour les librairies).
Si ceci n'est pas clair je t'invite à fouiller un peu le forum ce sont des choses que j'ai déjà expliquées par le passé.
Si tu as le choix entre .a et .so :
- choisis .a si tu veux que le programme soit facilement exécutable sur une plateforme. Concrètement le binaire de la librairie est copié dans l'exécutable, donc pas besoin pour l'utilisateur de déployer la librarie. Mais ton programme ne tirera pas partie des mises à jours éventuelles de la librairie à moins de le recompiler.
- choisis le .so si tu veux que le programme soit plus petit. Il faut que le .so soit présent sur la machine. L'avantage c'est que si le .so est mis à jour, ton programme en bénéficie.
Bonne chance
En supposant que ce fichier soit dans /usr/local/pouet/include/algo/blast/core/blast_def.h, il faut passer à gcc l'option :
-I/usr/local/pouet/include
(tu peux aussi utiliser -isystem). Exemple :
gcc -c -W -Wall -I/usr/local/pouet/include mon_module.c
Si le programme plante au linkage, il faut que tu passes en paramètre de gcc le binaire de la librairie en paramètre ou une manière d'y accéder. Tout ce qui suit, contrairement au -I, ne concerne que la compilation de l'exécutable, pas celle des fichiers .o.
- si c'est un .a (librairie statique), elle se passe en paramètre à gcc au même titre qu'un .o au moment de construire l'exécutable
- si c'est un .so (libraire dynamique), par exemple libpouet.so, il faut passer à gcc l'option :
-lpouet
Exemple :
gcc -W -Wall -I/usr/local/pouet/include -o mon_executable main.c module.o libplop.a -lpouet
Si de plus la librairie pouet n'est pas dans un répertoire standard (par exemple /usr/local/pouet/lib), il faut lui dire ou la trouver à l'aide des options -Wl,R et -L (s'utilise de la même façon que -I et -isystem, sauf que c'est pour les librairies).
gcc -W -Wall -I/usr/local/pouet/include -L/usr/local/pouet/lib -Wl,R/usr/local/pouet/lib -o mon_executable main.c module.o libplop.a -lpouet
Si ceci n'est pas clair je t'invite à fouiller un peu le forum ce sont des choses que j'ai déjà expliquées par le passé.
Si tu as le choix entre .a et .so :
- choisis .a si tu veux que le programme soit facilement exécutable sur une plateforme. Concrètement le binaire de la librairie est copié dans l'exécutable, donc pas besoin pour l'utilisateur de déployer la librarie. Mais ton programme ne tirera pas partie des mises à jours éventuelles de la librairie à moins de le recompiler.
- choisis le .so si tu veux que le programme soit plus petit. Il faut que le .so soit présent sur la machine. L'avantage c'est que si le .so est mis à jour, ton programme en bénéficie.
Bonne chance
salut
oooooooook, ça marche , il connait le premier fichie .h
mais le problème c'est que ce dernier fichier inclu des autres fichiers qui se trouvent dans un répertoire complètement différent,
donc je dois organiser ça dans un makefile, n'est ce pas
parce qu il y a beaucoup d includes
bon s'il vous plait donnez moi où mettre ces lignes de spécifications des includes pour les fichiers .h
parce que je vais pas les compiler comme pour le cas des .c
merci
oooooooook, ça marche , il connait le premier fichie .h
mais le problème c'est que ce dernier fichier inclu des autres fichiers qui se trouvent dans un répertoire complètement différent,
donc je dois organiser ça dans un makefile, n'est ce pas
parce qu il y a beaucoup d includes
bon s'il vous plait donnez moi où mettre ces lignes de spécifications des includes pour les fichiers .h
parce que je vais pas les compiler comme pour le cas des .c
merci
bonjour
merci pour votre réponse mais au fait moi j'utilise icc
et avec : icc -c -W -Wall -I/usr/local/pouet/include blast_lookup.c
il me affiche l'erreur suivante:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^
compilation aborted for blast_lookup.c (code 4)
merci pour votre réponse mais au fait moi j'utilise icc
et avec : icc -c -W -Wall -I/usr/local/pouet/include blast_lookup.c
il me affiche l'erreur suivante:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^
compilation aborted for blast_lookup.c (code 4)
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
19 févr. 2009 à 14:14
19 févr. 2009 à 14:14
hello
il y a un include de trop, non ?
icc -c -W -Wall -I/usr/local/pouet blast_lookup.c
puisque:
#include <include/blast_def.h>
il y a un include de trop, non ?
icc -c -W -Wall -I/usr/local/pouet blast_lookup.c
puisque:
#include <include/blast_def.h>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut
merci mais au fait, non
#include <include/blast_def.h>
c'est le premier fichier à inclure
les fichiers sont bien dans le repertoire: users/ladj/Dounia/blast/include
y compris:blast_def.h
d'abors il accepte pas le -W:
icc: Command line remark: option '-W' not supported
et puis quand j'exclu le -W et je fais:
icc -c -Wall -I/users/ladj/Dounia/blast/include blast_lookup.c
il me signale:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^
compilation aborted for blast_lookup.c (code 4)
merci
merci mais au fait, non
#include <include/blast_def.h>
c'est le premier fichier à inclure
les fichiers sont bien dans le repertoire: users/ladj/Dounia/blast/include
y compris:blast_def.h
d'abors il accepte pas le -W:
icc: Command line remark: option '-W' not supported
et puis quand j'exclu le -W et je fais:
icc -c -Wall -I/users/ladj/Dounia/blast/include blast_lookup.c
il me signale:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^
compilation aborted for blast_lookup.c (code 4)
merci
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
19 févr. 2009 à 15:45
19 févr. 2009 à 15:45
avec
-I/users/ladj/Dounia/blast/include
et
#include <include/blast_def.h>
il va chercher blast_def.h dans /users/ladj/Dounia/blast/include/include
non ?
-I/users/ladj/Dounia/blast/include
et
#include <include/blast_def.h>
il va chercher blast_def.h dans /users/ladj/Dounia/blast/include/include
non ?
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
19 févr. 2009 à 16:38
19 févr. 2009 à 16:38
utiliser plusieurs -I
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
19 févr. 2009 à 21:07
19 févr. 2009 à 21:07
Comme dit dubcek, tout simplement : -I/usr/local/pouet/include -I/usr/local/plop/include
Normalement un paramètre passé par -I devrait toujours finir par "/include".
De même un paramètre passé par -L ou -Wl,R devrait toujours finir par "/lib". De manière complètement similaire à l'option -I, tu peux mettre plusieurs -L / -Wl,R dans une ligne de compilation.
Bonne chance
Normalement un paramètre passé par -I devrait toujours finir par "/include".
De même un paramètre passé par -L ou -Wl,R devrait toujours finir par "/lib". De manière complètement similaire à l'option -I, tu peux mettre plusieurs -L / -Wl,R dans une ligne de compilation.
Bonne chance
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
20 févr. 2009 à 00:27
20 févr. 2009 à 00:27
Yep :-)
Bonne continuation
Bonne continuation