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 à la création d'une librairie .so


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur de Recherche

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 11
    Points
    11
    Par défaut Problème à la création d'une librairie .so
    Bonjour,

    J'essaie de compiler un code de calcul sous forme d'une librairie .so afin de l'appeler sous Java via jni.

    Je développe sous eclipse et dispose d'un makefile auto-généré. Il fonctionne très bien dans le cas d'une compilation classique et l'exécutable renvoie les bons résultats. Mais dans le cas présent "shared-library" j'ai l'erreur suivante à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    g++ -shared -o "libtest.so"  ./sr/Axe.o ./sr/Pointe.o ./sr/Segment.o ./sr/SystRac.o  ./sol/Horizon.o ./sol/Sol.o  ./math/mathArchiSimple.o ./math/r3.o  ./main/main.o ./main/var.o  ./modele_archiSimple.o   
    /usr/bin/ld: ./sr/Axe.o: relocation R_X86_64_32S against `vtable for Axe' can not be used when making a shared object; recompile with -fPIC
    ./sr/Axe.o: could not read symbols: Bad value
    collect2: ld a retourné 1 code d'état d'exécution

    J'ai donc naïvement rajouté -fPIC et obtient la même erreur en lancer le make via la console (via eclipse il ecrase les modfications) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    building target: libtest.so
    Invoking: Cross G++ Linker
    g++ -fPIC -shared -o "libArchiSimple.so"  ./sr/Axe.o ./sr/Pointe.o ./sr/Segment.o ./sr/SystRac.o  ./sol/Horizon.o ./sol/Sol.o  ./math/mathArchiSimple.o ./math/r3.o  ./main/main.o ./main/var.o  ./modele_archiSimple.o   
    /usr/bin/ld: ./sr/Axe.o: relocation R_X86_64_32S against `vtable for Axe' can not be used when making a shared object; recompile with -fPIC
    ./sr/Axe.o: could not read symbols: Bad value
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [libtest.so] Erreur 1
    J'ai cherché sur les forum mais je reste bloqué. Est ce que quelqu'un serait susceptible de me donner des pistes ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Il faut rajouter -fPIC -DPIC aux options de compilation de chacun des .o utilisé pendant le link. Les informations de relocation sont créées à ce moment là.

    Note : j'insiste bien sur le -DPIC, parce que -fPIC ne définit pas automatiquement cette constante (et cette constante peut avoir un effet sur la déclaration des symboles dans les headers de la glibc et de la librt).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur de Recherche

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup, ça fonctionne !!

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/04/2006, 17h48
  2. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 12h05
  3. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46
  4. Création d'une librairie ???
    Par Mike888 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 10/10/2004, 12h16
  5. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/2004, 15h17

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