p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité de passage
    Inscrit en
    février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 2
    Points : 0
    Points
    0

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 686
    Points : 10 303
    Points
    10 303

    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

  3. #3
    Invité de passage
    Inscrit en
    février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 2
    Points : 0
    Points
    0

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 686
    Points : 10 303
    Points
    10 303

    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

Discussions similaires

  1. 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 APIs
    Réponses: 7
    Dernier message: 11/10/2005, 16h24
  4. Creer et utiliser une librairie externe à l'exécutable
    Par multani dans le forum Outils pour C & C++
    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