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

Interfaçage autre langage Python Discussion :

utiliser une librairie partager 32bits sur python 64


Sujet :

Interfaçage autre langage Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut utiliser une librairie partager 32bits sur python 64
    Bonjour,

    j'ai créer une librairie en c++ que j'ai partagé via Swig.
    je l'utilise sans problème sur une architecture 32 bits.

    je voudrai pouvoir utiliser ma librairie dans mon architecture 64 bits.
    la contrainte étant que ma librairie utilise des modules .so qui sont 32 bits et ne peuvent être compiler en 64.


    Est-ce possible ? Comment ?

    voici ce que j’utilise (version allégé) pour la création de ma lib partagé :

    Code : 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
     
    # Création de la librairie partager Python
    ar rcs obj/linuxrel/libeconf.a obj/linuxrel/econf.o
     
     
    echo '/* econf.i */ 
    %module econf
    %{
    #include "../../econf.h"
    %}
    %include "../../econf.h"' > obj/linuxrel/econf.i 
     
    swig -python -c++ obj/linuxrel/econf.i 
     
    g++ -m32 -c -fPIC -I/usr/include/python2.6 \
    -I/usr/easyvalid/tools/Econf/Framework/framework_sdk_v1.4.7/include obj/linuxrel/econf_wrap.cxx 
     
    g++ -m32 -O3 -shared -L/usr/easyvalid/tools/Econf/Framework/framework_sdk_v1.4.7/bin -Lobj/linuxrel/ -lpython2.6 -Wl,-soname,_econf.so econf_wrap.o -leconf -lsndfile -lm -ldl -lpthread -lrt -o obj/linuxrel/_econf.so
    lors de l'import depuis python 64 j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [easyvalid@EasyValid linuxrel]$ python -m econf
    Traceback (most recent call last):
      File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
        "__main__", fname, loader, pkg_name)
      File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
        exec code in run_globals
      File "/usr/easyvalid/tools/Econf/Convert/obj/linuxrel/econf.py", line 25, in <module>
        _econf = swig_import_helper()
      File "/usr/easyvalid/tools/Econf/Convert/obj/linuxrel/econf.py", line 21, in swig_import_helper
        _mod = imp.load_module('_econf', fp, pathname, description)
    ImportError: /usr/easyvalid/tools/Econf/Convert/obj/linuxrel/_econf.so: wrong ELF class: ELFCLASS32

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    L'erreur:
    "ImportError: /usr/easyvalid/tools/Econf/Convert/obj/linuxrel/_econf.so: wrong ELF class: ELFCLASS32"
    est "systeme"....

    Comme l'espace d'adressage que l'OS propose à une bibliothèque 32 bits est sensiblement différent d'un 64 bits, je ne doute qu'un "OS" supporte un tel mélange - c'est compliqué... et il y a des solutions de contournement "possible" au niveau application qui en réduisent l'intérêt.
    Dans votre cas, la solution pourrait être d'installer un Python 32 bits dans un OS 64 bits... Si vous voulez absolument profiter d'un espace d'adressage 64bits et de l'ancienne bibliothèque, il devrait être "possible" d'interfacer les deux via un IPC quelconque (un process 64 bits qui cause avec un process 32 bits de façon plus ou moins proche).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci @wiztricks pour votre réponse.

    Mon problème est que le programme python qui va importer la librairie "econf" est en 64 bits et utilise massivement le multithreading (au delà de la limite de 302 thread système en mode 32 bits), il me faut donc trouver une solution qui me permet d'importé cette lib 32 dans mon programme 64.

    Existe t'il une "passerelle" 64->32 ?

    ###### ######
    # P64 # --> passerelle --> # lib 32#
    ###### ######

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par the-atlantis Voir le message
    Existe t'il une "passerelle" 64->32 ?i
    On peut toujours faire une "passerelle", la question est de savoir si on pourra se contenter d'un pont en corde qui sera traversé de temps en temps par des humains ou s'il faut un truc genre aqueduc de Millau devant supporter le passage de XX tonnes.

    Ce sera un dialogue entre deux processus ou entre threads de processus différents. Ce sera donc "context switch" et "transferts de messages"... qui pourront être pénalisants côté temps de réponse.

    Après c'est du Python32 <-> Python64 ou du Python64 - DLL64bits <-> Process 32 bits.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [debutant] utiliser une librairie 32-bit sur un ordinateur 64-bit.
    Par badich dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 17/05/2013, 13h13
  2. XP home : utiliser une imprimante partagée sur un domaine
    Par hellomorld dans le forum Windows XP
    Réponses: 3
    Dernier message: 08/03/2013, 15h16
  3. Utiliser une librairie
    Par BugFactory dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 11/10/2005, 16h24
  4. Creer et utiliser une librairie externe à l'exécutable
    Par multani dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 06/11/2003, 10h11
  5. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    Réponses: 6
    Dernier message: 22/08/2003, 11h22

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