Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Inscrit
    Profil pro
    Inscrit en
    novembre 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : novembre 2006
    Messages : 181
    Points : 28
    Points
    28

    Par défaut Erreur de compilation en utilisant la librairie partagée de MySQL (fPIC)

    Bonjour,

    Je cherche à compiler un module Perl (DBIx MyParse) qui utilise la librairie MySQL. J'obtiens l'erreur suivante lors du "make install" de ce module :
    Code :
    1
    2
    /usr/bin/ld: /usr/src/mysql-5.0.45//libmysqld/libmysqld.a(my_thr_init.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
    /usr/src/mysql-5.0.45//libmysqld/libmysqld.a: could not read symbols: Bad value
    Alors, j'ai cherché un peu partout. J'ai trouvé notamment ce topic où la personne rencontrait un problème similaire. Problème : en ajoutant la fameuse option "-fPIC", pas mieux !

    Comme je ne veux pas me risquer à modifier le Makefile de MySQL, j'ai ajouté l'option dans le configure :
    Code :
    ./configure --with-embedded-server --enable-shared --with-pic
    Faut-il faire autre chose que ça ? La version de MySQL que j'utilise est la 5.0.45 .

    Merci d'avance si vous avez des idées

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    novembre 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : novembre 2006
    Messages : 181
    Points : 28
    Points
    28

    Par défaut

    Bonjour,

    Je me permets de remonter ce topic car j'ai repris le sujet et j'ai compris quelque chose qui m'avait échappé : en fait le problème est que les 2 projets (MySQL + le module Perl) doivent être compilés avec fPIC pour pouvoir interagir ? Quelqu'un connaît-il ces mécanismes-là ? Du coup j'ai changé les arguments de ./configure pour MySQL :
    Code :
    ./configure --with-embedded-server --enable-shared
    ... ainsi que le Makefile.PL du module, qui si j'ai bien compris permet de générer un Makefile "classique" : j'ai changé la valeur de CCFLAGS qui dans Makefile.PL était rempli avec ça :
    Code :
    1
    2
    3
    4
    5
    my $ccflags = `grep "^CXXFLAGS =" $makefile_path`;
     
    $ccflags =~ s{^CXXFLAGS = }{}sio;
    $ccflags =~ s{[\r\n\t]}{}sio;
    $ccflags .= " -DNO_EMBEDDED_ACCESS_CHECKS ";
    et j'ai simplement (naïvement) ajouté l'option fPIC dedans :
    Code :
    1
    2
    3
    4
    5
    my $ccflags = `grep "^CXXFLAGS =" $makefile_path`;
     
    $ccflags =~ s{^CXXFLAGS = }{}sio;
    $ccflags =~ s{[\r\n\t]}{}sio;
    $ccflags .= " -fPIC -DNO_EMBEDDED_ACCESS_CHECKS ";
    .

    Le Makefile est bien généré quand je lance , et ensuite quand je lance je vois bien mon option -fPIC qui apparait dans la log ; mais l'erreur est toujours là comme avant.

    A défaut d'une solution, quelqu'un peut-il m'expliquer d'où vient le problème puisque j'ai mis l'option -fPIC pour les deux ?


    Merci d'avance !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •