Gcc problem with link

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. Contributeur
      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   :-))))
      1. 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...
        1. Contributeur
          il te met quoi comme erreur exactement?

          Maily   :-))))
          1. ben, justement je ne sais pas trop comment le lier dans ma compil, alors si tu as une idée
            1. Contributeur
              gcc nom_du_premier_fichier.c nom_du_deuxième_fichier.c

              et voilà!!

              Maily   :-))))
              1. 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...
                1. 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 ?
                  1. Contributeur
                    stdlib.h pour malloc et getenv
                    et string.h pour strlen

                    voili voilou
                    bon courage

                    Maily   :-))))
                    1. 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+