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