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

Linux Discussion :

Compiler un .c avec lib cURL en statique


Sujet :

Linux

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut Compiler un .c avec lib cURL en statique
    Bonsoir

    J'ai posté une contrib sur un site mais le problème, c'est que tous les membres n'ont pas la même version de *ix donc elle ne fonctionne pas chez tout le monde.

    Niveau compilation, j'ai fait un simple
    cc projet.c -o projet -lcurl
    Donc l'appel a la librairie cURL est et les versions de lib cURL diffèrent selon l'os ce qui crée une erreur exemple: "impossible de trouver la librairie dynamique libcurl2.9.so".

    Je souhaiterais donc compiler le programme en utilisant lib cURL en statique.

    Une idée serait donc la bienvenue, Merci d'avance

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Cool ça change

    Mais du coup le programme n'est plus compilé et je me retrouve avec pléthore d'erreurs :
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(netrc.o): dans la fonction « Curl_parsenetrc »:
    (.text+0x443): AVERTISSEMENT: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from
    the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(hostip6.o): dans la fonction « Curl_getaddrinfo »:
    (.text+0x146): AVERTISSEMENT: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries f
    rom the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(connect.o): dans la fonction « singleipconnect »:
    (.text+0x370): AVERTISSEMENT: Using 'getprotobyname' in statically linked applications requires at runtime the shared librarie
    s from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(url.o): dans la fonction « fix_hostname »:
    (.text+0x3a9): référence indéfinie vers « stringprep_check_version »
    Sans -static ça fonctionne bien sûr ...

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Les avertissements peuvent être ignorés sans problème, en revanche, pour la dernière erreurs, il faut ajouté

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Tout d'abord, Merci beaucoup pour ton aide.

    Après une recherche GG j'ai bien compris l'utlité de linker la lib IDN

    Cependant, lorsque je fais un ld sur mon executable, celui sensé être "dynamically linked" donne ceci :
    ldd x
    linux-gate.so.1 => (0xffffe000)
    libcurl.so.3 => /usr/lib/libcurl.so.3 (0xb7f91000)
    libidn.so.11 => /usr/lib/libidn.so.11 (0xb7f61000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e2f000)
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7e13000)
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7d97000)
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7d72000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7d6f000)
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb7d6a000)
    libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7d56000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d52000)
    libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7d13000)
    libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7bd9000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7bc5000)
    /lib/ld-linux.so.2 (0xb7fd6000)
    Et le "static" avec le link de librairie IDN donne le même résultat ... les dépendances sont donc les mêmes ?

    J'avais testé un -Wall qui fonctionnait, mais c'est du mercurochrome sur une jambe de bois non ?


  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par delete Voir le message
    Et le "static" avec le link de librairie IDN donne le même résultat ... les dépendances sont donc les mêmes ?
    ce n'est pas normal!

    Citation Envoyé par delete Voir le message
    J'avais testé un -Wall qui fonctionnait, mais c'est du mercurochrome sur une jambe de bois non ?
    absolument.

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    ce n'est pas normal!
    Au temps pour moi j'avais oublié le -static je suis un bourrin !

    Ceci dit pour être très précis (cette fois) voici la ligne de commande et le résultat :
    cc x.c -o x -lcurl -lidn -static
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(netrc.o): dans la fonction « Curl_parsenetrc »:
    (.text+0x443): AVERTISSEMENT: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from
    the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(hostip6.o): dans la fonction « Curl_getaddrinfo »:
    (.text+0x146): AVERTISSEMENT: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries f
    rom the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(connect.o): dans la fonction « singleipconnect »:
    (.text+0x370): AVERTISSEMENT: Using 'getprotobyname' in statically linked applications requires at runtime the shared librarie
    s from the glibc version used for linking
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ldap.o): dans la fonction « DynaGetFunction »:
    (.text+0x1f): référence indéfinie vers « dlsym »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ldap.o): dans la fonction « Curl_ldap »:
    (.text+0x2cc): référence indéfinie vers « dlclose »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ldap.o): dans la fonction « Curl_ldap »:
    (.text+0x2e4): référence indéfinie vers « dlclose »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ldap.o): dans la fonction « Curl_ldap »:
    (.text+0x7a0): référence indéfinie vers « dlopen »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ldap.o): dans la fonction « Curl_ldap »:
    (.text+0x7c3): référence indéfinie vers « dlopen »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ssluse.o): dans la fonction « Curl_ossl_version »:
    (.text+0xc): référence indéfinie vers « SSLeay »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ssluse.o): dans la fonction « Curl_ossl_recv »:
    (.text+0xd9): référence indéfinie vers « SSL_read »
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/libcurl.a(ssluse.o): dans la fonction « Curl_ossl_recv »:

    etc...

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Ce ne sont plus des librairies que j'ajoute mais des bibliothèques

    J'en suis à :
    cc x.c -o x -lcurl -lidn -lssl -ldl -lcrypto -lgssapi_krb5 -lcrypto -lc -lz -lresolv -lkrb5support -lk5crypto -lkrb5 -lgssapi_krb5 -static
    Mais rien à faire ...

    Il doit y avoir une lib liée à cURL mais je ne sais pas laquelle ...

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    "librairie" dans le contexte de l'édition de lien n'a aucun sens, de plus, l'ordre dans lequel tu places tes flags est important. Tu dis que ça ne marche toujours pas mais tu ne donnes pas les nouvelles erreurs.

  11. #11
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    En fait c'est toujours la fonction getpwuid() qui est rappelée dans les messages d'errreur quelque soit l'ordre de linkage des libs ...

    Je suis un certes, mais ça fait quelques années que je n'avais pas touché le compilateur C...

  12. #12
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Donne nous la sortie de l'éditeur de lien et précise ton système.

  13. #13
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    je vais être plus précis :

    Je viens de trouver un début de solution -> curl-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # curl-config --libs
    -L/usr/lib -lcurl -L/usr/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lkrb5support -lresolv -lidn -lssl -lcrypto -ldl -lssl -lcrypto -lz
    L'ordre des librairies est donc le bon maintenant.

    à la compil, le résultat est impécable en dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -L/usr/lib -lcurl -L/usr/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lkrb5support -lresolv -lidn -lssl -lcrypto -ldl -lssl -lcrypto -lz x.c
    Dès que j'ajoute -static voici le résultat :
    # gcc -static -L/usr/lib -lcurl -L/usr/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lkrb5support -lresolv -lidn -lssl -lcrypto -ldl -lssl -lcrypto -lz
    x.c
    /tmp/ccYh3sus.o: dans la fonction « curl_getcontents »:
    x.c: (.text+0x64): référence indéfinie vers « curl_easy_init »
    x.c: (.text+0x87): référence indéfinie vers « curl_easy_setopt »
    x.c: (.text+0xa2): référence indéfinie vers « curl_easy_setopt »
    x.c: (.text+0xbc): référence indéfinie vers « curl_easy_setopt »
    x.c: (.text+0xc7): référence indéfinie vers « curl_easy_perform »
    x.c: (.text+0xd5): référence indéfinie vers « curl_easy_cleanup »
    collect2: ld returned 1 exit status
    Edit : Sorry : Système Debian Etch 2.6.18-4-686

  14. #14
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Non en dynamique l'ordre n'a pas d'importance donc le fait que ça link sans warning en dynamique ne veut pas dire qur tu as mis le bon ordre.

  15. #15
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    L'ordre des libs m'est donné par la commande curl-config --libs

    Donc je suppose donc qu'il est bon.

    Avec du recul et des recherches, je suppose qu'il faut avoir une version de cURL compilée en static pour que cela fonctionne ...

    Je me trompe peut être ... J'espère ...

Discussions similaires

  1. Compiler un .c avec lib cURL en static
    Par delete dans le forum Linux
    Réponses: 0
    Dernier message: 07/03/2009, 23h58
  2. Réponses: 1
    Dernier message: 20/06/2008, 09h09
  3. Compilation en debug avec des lib en release
    Par Aradesh dans le forum MFC
    Réponses: 2
    Dernier message: 05/01/2007, 10h47
  4. Problème avec lib SDL
    Par Info-Rital dans le forum Linux
    Réponses: 8
    Dernier message: 02/07/2004, 20h59
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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