Gcc problem with link

tvans -  
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)

12 réponses

maily Messages postés 7560 Statut Contributeur 453
 
ça marche toujours pas?

http://www.commentcamarche.net/forum/affich-365020

Maily   :-))))
0
tvans
 
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
0
maily Messages postés 7560 Statut Contributeur 453
 
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   :-))))
0
tvans
 
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maily Messages postés 7560 Statut Contributeur 453
 
il te met quoi comme erreur exactement?

Maily   :-))))
0
tvans
 
ben, justement je ne sais pas trop comment le lier dans ma compil, alors si tu as une idée
0
maily Messages postés 7560 Statut Contributeur 453
 
gcc nom_du_premier_fichier.c nom_du_deuxième_fichier.c

et voilà!!

Maily   :-))))
0
tvans
 
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...
0
tvans
 
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 ?
0
maily Messages postés 7560 Statut Contributeur 453
 
stdlib.h pour malloc et getenv
et string.h pour strlen

voili voilou
bon courage

Maily   :-))))
0
tvans
 
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+
0
maily Messages postés 7560 Statut Contributeur 453
 
Ravie d'avoir pu t'aider....

Bon courage

Maily   :-))))
0