Gcc problem with link
tvans
-
maily Messages postés 7560 Statut Contributeur -
maily Messages postés 7560 Statut Contributeur -
salut,
j'essaie actuellement de compiler un programme en c et je n'arrive pas a faire un lien avec un fichier nécssaire .c car ce dernier n'est pas compilable (pas d'inclusion, et ne contenant que le corps d'un fonction dont les variables d'initialisation sont contenus dans d'autre fichier)
(linux, gcc 3.02, appli en c)
j'essaie actuellement de compiler un programme en c et je n'arrive pas a faire un lien avec un fichier nécssaire .c car ce dernier n'est pas compilable (pas d'inclusion, et ne contenant que le corps d'un fonction dont les variables d'initialisation sont contenus dans d'autre fichier)
(linux, gcc 3.02, appli en c)
A voir également:
- Gcc problem with link
- Family link localisation - Télécharger - Guide protection
- Family link localisation impossible ✓ - Forum Applis & Sites
- Code family link 6 chiffres - Forum Samsung
- Mon enfant à déverrouillé family link - Forum Huawei
- Family link le temps ne correspondent pas - Forum Contrôle parental
12 réponses
salut,
non pour les fichiers inclues dans la biblio .so j'ai réussi à faire le lien mais un de ces fichiers fait appel à un fichier .c qui ne contient en tout et pour tout que le corps d'une fonction , ce fichier est appelé par un include 'fichier.c', et utilisation de sa fonction
mais je ne sais pas comment inclure ce fichier dans ma compilation
non pour les fichiers inclues dans la biblio .so j'ai réussi à faire le lien mais un de ces fichiers fait appel à un fichier .c qui ne contient en tout et pour tout que le corps d'une fonction , ce fichier est appelé par un include 'fichier.c', et utilisation de sa fonction
mais je ne sais pas comment inclure ce fichier dans ma compilation
C'est normal que ça marche pas!!
comment peux tu inclure un .c?? Non, c'est impossible
Il faut que tu fasses le .h de ce .c
tu inclues le .h et tu compiles... normalement, ça devrait marcher
Maily :-))))
comment peux tu inclure un .c?? Non, c'est impossible
Il faut que tu fasses le .h de ce .c
tu inclues le .h et tu compiles... normalement, ça devrait marcher
Maily :-))))
ben ce fichier comme ce de la biblio sont des fichiers sources d'un autre projet, et il n'y a pas de fichierTordu.h pour le fichier Tordu.c
tiens regarde son code entier :
char *get_path(char *filename){
char *homedir;
char *buff;
static char *config_dir = "/.mplayer";
int len;
if ((homedir = getenv("HOME")) == NULL)
return NULL;
len = strlen(homedir) + strlen(config_dir) + 1;
if (filename == NULL) {
if ((buff = (char *) malloc(len)) == NULL)
return NULL;
sprintf(buff, "%s%s", homedir, config_dir);
} else {
len += strlen(filename) + 1;
if ((buff = (char *) malloc(len)) == NULL)
return NULL;
sprintf(buff, "%s%s/%s", homedir, config_dir, filename);
}
mp_msg(MSGT_GLOBAL,MSGL_V,"get_path('%s') -> '%s'\n",filename,buff);
return buff;
}
et maintenant l'appel dans un des fichier de la biblio :
#include "get_path.c"
#else
extern char * get_path( char * filename );
#endif
extern char * dvdcss_cache_dir;
/**
* Open a DVD image or block device file.
*/
static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
{
dvd_reader_t *dvd;
dvd_input_t dev;
/* setup cache dir */
if(!dvdcss_cache_dir){
dvdcss_cache_dir=get_path( "" );
...
si tu y comprends quelque chose car depuis un moment je tourne en rond...
tiens regarde son code entier :
char *get_path(char *filename){
char *homedir;
char *buff;
static char *config_dir = "/.mplayer";
int len;
if ((homedir = getenv("HOME")) == NULL)
return NULL;
len = strlen(homedir) + strlen(config_dir) + 1;
if (filename == NULL) {
if ((buff = (char *) malloc(len)) == NULL)
return NULL;
sprintf(buff, "%s%s", homedir, config_dir);
} else {
len += strlen(filename) + 1;
if ((buff = (char *) malloc(len)) == NULL)
return NULL;
sprintf(buff, "%s%s/%s", homedir, config_dir, filename);
}
mp_msg(MSGT_GLOBAL,MSGL_V,"get_path('%s') -> '%s'\n",filename,buff);
return buff;
}
et maintenant l'appel dans un des fichier de la biblio :
#include "get_path.c"
#else
extern char * get_path( char * filename );
#endif
extern char * dvdcss_cache_dir;
/**
* Open a DVD image or block device file.
*/
static dvd_reader_t *DVDOpenImageFile( const char *location, int have_css )
{
dvd_reader_t *dvd;
dvd_input_t dev;
/* setup cache dir */
if(!dvdcss_cache_dir){
dvdcss_cache_dir=get_path( "" );
...
si tu y comprends quelque chose car depuis un moment je tourne en rond...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ben si tu as vu, j'ai recopié le code entier du fichierTordu.c, et il n'y a aucune inclusion, même les fonction getenv et autres feront l'objet d'une erreur de compil, et je ne parle pas des variables qui sont initialisé dans un autre fichierAutre.h,
de plus c'est un source et je voudrais autant que possible ne pas y toucher donc tu comprends peut-être mieux mon problème...
de plus c'est un source et je voudrais autant que possible ne pas y toucher donc tu comprends peut-être mieux mon problème...
une dernière sollicitation,
j'ai décidé de modifier en partie le source, mais peut tu me dire quelles sont les bibliothèques contenant getenv, strlen, malloc ?
j'ai décidé de modifier en partie le source, mais peut tu me dire quelles sont les bibliothèques contenant getenv, strlen, malloc ?
merci pour ton aide, je viens de faire les modifs et ça a l'air de tourner.
c'est ton
gcc nom_du_premier_fichier.c nom_du_deuxième_fichier.c
qui m'a décidé à toucher au source, une solution simple avec un peu de remords vaut mieux qu'une solution complexe (si elle existe) avec la fierté de ne pas avoir rien modifier du source!! l'informaticien n'a pas le tems d'être fier ;-)
a+
c'est ton
gcc nom_du_premier_fichier.c nom_du_deuxième_fichier.c
qui m'a décidé à toucher au source, une solution simple avec un peu de remords vaut mieux qu'une solution complexe (si elle existe) avec la fierté de ne pas avoir rien modifier du source!! l'informaticien n'a pas le tems d'être fier ;-)
a+