IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème makefile + glib


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Par défaut Problème makefile + glib
    Bonjour à tous,

    Je travaille sur un projet en Python et C : les calculs bas niveau sont réalisés en C et l'orchestration se fait en Python. J'ai donc besoin de générer une librairie dynamique de mes sources C, afin de les utiliser en Python.

    Cela marchait très bien jusqu'à ce que j'ajoute une mise en cache dans mon application qui utilise les HashTable de la librairie glib. Je n'arrive plus à écrire un makefile correct afin de compiler mes sources (j'ai testé une utilisation de fonctions de glib sur un petit exemple à coté (sans makefile donc), cela marche sans problème).

    Voici mon makefile actuel (uniquement pour macos pour l'instant) :
    Code makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CC=gcc
    ARCHFLAG=-arch i386
    LFLAGS=`pkg-config --cflags --libs glib-2.0`
    CFLAGS=$(LFLAGS) -fpic
    EXEC=ltlsynthesis
    OBJS=antichain.o automaton.o backward_algorithm.o linked_list.o state.o bits.o tools.o cache.o
     
    ltlsynthesis.dylib: $(OBJS)
        $(CC) $(ARCHFLAG) -dynamiclib -o $@ $^ $(LFLAGS)
     
    antichain.o: constants.h linked_list.o
     
    automaton.o: bits.h constants.h linked_list.h tools.h
     
    backward_algorithm.o: constants.h linked_list.h automaton.h state.h antichain.h bits.h
     
    linked_list.o: constants.h
     
    state.o: tools.h constants.h automaton.h bits.h linked_list.h
     
    tools.o : constants.h
     
    cache.o : state.h
     
    %.o: %.c
        $(CC) $(ARCHFLAG) -o $@ $(CFLAGS) -c $<
     
    clean:
        rm -f *.so *.dylib *.o *.tab.* *.yy.*
     
    install: ltlsynthesis.dylib
        cp ltlsynthesis.dylib ../

    En réalité, seul le fichier cache.c utilise glib. J'obtiens ce message quand je fais make install :
    gcc -arch i386 -o linked_list.o `pkg-config --cflags --libs glib-2.0` -fpic -c linked_list.c
    i686-apple-darwin10-gcc-4.2.1: -lglib-2.0: linker input file unused because linking not done
    i686-apple-darwin10-gcc-4.2.1: -lintl: linker input file unused because linking not done
    gcc -arch i386 -o antichain.o `pkg-config --cflags --libs glib-2.0` -fpic -c antichain.c
    i686-apple-darwin10-gcc-4.2.1: -lglib-2.0: linker input file unused because linking not done
    i686-apple-darwin10-gcc-4.2.1: -lintl: linker input file unused because linking not done
    (...) idem pour chaque fichier source (...)
    ld: warning: in /opt/local/lib/libglib-2.0.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
    ld: warning: in /opt/local/lib/libintl.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
    Undefined symbols:
    "_g_hash_table_new", referenced from:
    _initialize_cache in cache.o
    "_g_hash_table_destroy", referenced from:
    _destroy_cache in cache.o
    "_g_hash_table_insert", referenced from:
    _add_to_cache in cache.o
    "_g_hash_table_remove_all", referenced from:
    _clean_cache in cache.o
    "_g_hash_table_lookup", referenced from:
    _get_from_cache in cache.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make: *** [ltlsynthesis.dylib] Error 1
    Quelqu'un peut-il m'aider? J'ai déjà retourné le makefile dans tous les sens, pas moyen de générer ma dylib (j'ai besoin qu'elle soit en i386).

    D'avance merci.

    Naked

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    En voyant ceci:
    ld: warning: in /opt/local/lib/libintl.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
    J'ai l'impression que vous compiler pour la mauvaise architecture.
    Notamment si vous avec un processeur 64bits, il vous faut les bibliothèques 64bits et compiler un programme en 64bits.
    Sinon, si vous avez un processeur en 64bits, et que vous voulez compiler en 32bits, alors il vous faut les bibliothèques 32bits (et que si le compilateur ne trouve que les versions qui ne sont pas compatible alors il indique un Warning et il n'utilise pas les fichiers, donc il ne compilera pas)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Par défaut
    Bonjour,

    Tout d'abord merci d'avoir répondu aussi rapidement.

    Effectivement, les librairies libglib-2.0.dylib et libintl.dylib sont en x86_64. J'ai installé glib via macports... sans rien préciser. Comment dois-je faire pour l'installer en 32 bits ?

    Merci,
    Naked

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Hum, j'ai la vive impression que vous etes sur un MAC. Du coup, je ne sais pas trop comment ils font pour installer une bibliotheque.
    Techniquement, vous utiliser une commande, si vous lisez la documentation de cette commande, il doit y avoir une option pour specifier la plateforme.
    Sinon, s'ils utilisent un systeme de paquet, sous GNU/Linux y a un paquet special pour le support du 32bits.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Par défaut
    En effet, je travaille sous mac os. J'ai utilisé macport (un gestionnaire de paquets) pour installer glib, mais il ne fait pas de distinction sur l'architecture du paquet a installer.

    Par défaut sur snow leopard, l'architecture est x86_64. J'ai modifié le fichier de config pour que ce soit plutôt i386 et j'ai réinstallé glib. Il m'a bien réinstallé toutes les dépendances en i386... mais il m'a laissé glib en x86_64. Est-ce possible qu'il n'y ait pas de version 32bits de glib??

  6. #6
    Membre averti
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Par défaut
    Visiblement il y en a une... mais pour l'obtenir j'ai du passer par fink (autre gestionnaire de paquets). Bref, problème résolu. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème makefile + librairie
    Par Wakko dans le forum C
    Réponses: 1
    Dernier message: 27/06/2008, 20h44
  2. [Qt][Import DLL] Problème Makefile / .pro
    Par Gulish dans le forum Qt
    Réponses: 11
    Dernier message: 21/02/2008, 10h00
  3. Problème Makefile g++
    Par donkeyquote dans le forum C++
    Réponses: 3
    Dernier message: 20/02/2008, 23h13
  4. [QT][Import DLL] Problème Makefile / .pro
    Par Gulish dans le forum Windows
    Réponses: 1
    Dernier message: 19/02/2008, 09h56
  5. [Débutant]Encore problème Makefile
    Par Clark dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 31/05/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo