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

Bibliothèques C++ Discussion :

Mise en œuvre bibliothèque GMP pour C++


Sujet :

Bibliothèques C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut Mise en œuvre bibliothèque GMP pour C++
    Bonjour,
    Je suis sous linux Mint 20.3 et je programme pour le plaisir (je suis retraité).
    Je m'intéresse aux nombres premiers.
    J'utilise la bibliothèque GMP et j'utilise geany comme éditeur.
    J'ai réalisé une première version de mon programme en C.
    Cela fonctionne bien.
    J'ai voulu passer en C++ et là j'ai des soucis.
    J'ai installé GMP comme indiqué dans la documentation. Je peux voir en /usr/local/include le fichier gmp.h et d'autres en /usr/local/lib
    Jusque là tout va bizarrement bien.
    La compilation ne donne pas d'erreurs mais l'édition de liens si !
    J'ai pris des programmes de démonstration mais rien n'y fait.
    J'ai des tas d'erreurs comme :
    exempleGmp.cpp:7:2: error: ‘mpz_class’ has not been declared
    ou encore :
    /usr/bin/ld : exempleGmp2.cpp: (.text+0x54) : référence indéfinie vers « __gmpz_set_str »
    Cela donne l'impression que la bibliothèque GMP n'est pas bien installée.
    J'ai plusieurs fois refait l'installation en revenant en arrière avec timeshift (très pratique) mais sans aucun succès.
    J'ai essayé aussi avec code::blocks mais c'est pareil.
    Merci de me proposer quelque chose qui me fera avancer.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 750
    Par défaut
    Citation Envoyé par Luisne Voir le message
    La compilation ne donne pas d'erreurs mais l'édition de liens si !
    C'est normal et trivial
    Pendant l'édition des liens tu fournis soit les .o soit les bibliothèques (bascule ("switch" en anglais) -l avec gcc)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -lgmp file.cpp -o file
    Il faut savoir qu'avec gcc, -lXXX spécifie à gcc de chercher 1 bibliothèque libXXX.so ou libXXX.a dans les dossiers -L (<- en gros il préfixe lib)
    si je te dis cela, c'est pour adapter la bascule -lgmp

    documentation gcc, 3.15 Options for Linking (<- documentation en anglais pour -l, il faut le chercher dans la page)

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 750
    Par défaut
    Petit note concernant -l, l'option doit se trouver après les fichiers .o (et probablement .c/.cpp) car elle ne s'applique qu'au fichier situés à sa gauche. C'est l'une des rares options dont l'ordre est important.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 058
    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 058
    Billets dans le blog
    142
    Par défaut
    @jo_link_noir : c'est vrai qu'il y avait cette contrainte (globalement, j'avais retenu qu'il fallait mettre les options -l à la fin), mais elle a été retirée, je pense, depuis déjà quelques années, je dirais peut être GCC 6.
    Du coup, maintenant, ça passe, même en mettant les liens au début.
    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
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut Merci à tous
    Merci pour ces éclairages détaillés et expliqués.
    Je vais tester tout çà. Si çà fonctionne je reviens ici pour passer la discussion en résolu.

  6. #6
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Par défaut ben non toujours pareil
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ g++ -lgmp exempleGmp2.cpp -o exempleGmp2
    /usr/bin/ld*: /tmp/ccZGBB2C.o*: dans la fonction «*main*»*:
    exempleGmp2.cpp:(.text+0x3c)*: référence indéfinie vers «*__gmpz_inits*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0x54)*: référence indéfinie vers «*__gmpz_set_str*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0x6c)*: référence indéfinie vers «*__gmpz_set_str*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0x83)*: référence indéfinie vers «*__gmpz_add*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0xae)*: référence indéfinie vers «*__gmpz_out_str*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0xd7)*: référence indéfinie vers «*__gmpz_abs*»
    /usr/bin/ld*: exempleGmp2.cpp:(.text+0x102)*: référence indéfinie vers «*__gmpz_out_str*»
    collect2: error: ld returned 1 exit status
    Bref il fait pas les liens vers gmp, pourtant je vois bien dans le répertoire /usr/local/lib :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /usr/local/lib$ ls -la
    total 1976
    drwxr-xr-x  5 root root     4096 févr.  2 16:15 .
    drwxr-xr-x 10 root root     4096 janv.  4 15:14 ..
    -rw-r--r--  1 root root  1432906 févr.  2 16:15 libgmp.a
    -rwxr-xr-x  1 root root      913 févr.  2 16:15 libgmp.la
    lrwxrwxrwx  1 root root       16 févr.  2 16:15 libgmp.so -> libgmp.so.10.4.1
    lrwxrwxrwx  1 root root       16 févr.  2 16:15 libgmp.so.10 -> libgmp.so.10.4.1
    -rwxr-xr-x  1 root root   562112 févr.  2 16:15 libgmp.so.10.4.1
    drwxr-xr-x  2 root root     4096 févr.  2 16:15 pkgconfig
    drwxrwsr-x  4 root staff    4096 janv.  8 18:32 python2.7
    drwxrwsr-x  3 root staff    4096 janv.  4 15:16 python3.8
    Les messages d'erreur ne sont pas ce qu'on obtient sur un système sur lequel gmp n'est pas installé, car dans ce cas il indique clairement qu'il ne trouve pas gmp.
    Donc c'est probablement mal installé ou mal invoqué.
    Pendant l'installation je n'ai vu passer aucun message d'erreur.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/03/2013, 11h46
  2. Réponses: 1
    Dernier message: 17/01/2012, 11h47
  3. Réponses: 5
    Dernier message: 31/08/2011, 12h48

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