2017-07-31 3 views
0

J'appelle un seul module python avec une seule fonction d'une application C++. Je reçois une trace de pile. Je l'ai isolé à la ligne "import h5py" dans le module python. Si je cours ce module et fonctionne à l'intérieur de l'interpréteur, tout va bien. De plus, toutes les autres importations fonctionnent. Si je supprime le "import h5py" et commente le code qui l'utilise, alors charge le module et appelle la fonction de C++, tout fonctionne.PyImport_Import segfault

Également fait un test.py et bien sûr si je fais cela importer et charger le module en C++, il a le même résultat.

Quelqu'un at-il déjà vu quelque chose comme ça? Y at-il un moyen de contourner cela parce que j'ai vraiment besoin d'utiliser h5py dans mon module python et que j'ai besoin d'appeler le module de notre application C++.

Killing process on sync signal: 6, Aborted               
BEGIN stack trace                     
0: /lib64/libpthread.so.0() [0x346620f500]               
1: /lib64/libc.so.6(gsignal+0x35) [0x3465e328a5]              
2: /lib64/libc.so.6(abort+0x175) [0x3465e34085]              
3: /opt/gs/lib/libhdf5.so.8(H5check_version+0x13d) [0x2b8c62611e5d]         
4: /opt/gs/epd-7.3/lib/python2.7/site-packages/h5py/h5f.so(inith5f+0x19c1) [0x2b8c8df11481]   
5: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(_PyImport_LoadDynamicModule+0xc2) [0x2b8c61c78312]  
6: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xed290) [0x2b8c61c76290]        
7: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xed531) [0x2b8c61c76531]        
8: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyImport_ImportModuleLevel+0x2be) [0x2b8c61c7756e]  
9: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xd447d) [0x2b8c61c5d47d]        
10: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyObject_Call+0x68) [0x2b8c61bcef28]      
11: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyEval_CallObjectWithKeywords+0x56) [0x2b8c61c5d9a6]  
12: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x28b8) [0x2b8c61c60f08]    
13: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x8d2) [0x2b8c61c65c12]    
14: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyEval_EvalCode+0x32) [0x2b8c61c65c62]     
15: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(PyImport_ExecCodeModuleEx+0xc2) [0x2b8c61c74c02]   
16: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xec1ce) [0x2b8c61c751ce]        
17: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xeda8d) [0x2b8c61c76a8d]        
18: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xed290) [0x2b8c61c76290]        
19: /opt/gs/epd-7.3/lib/libpython2.7.so.1.0(+0xed764) [0x2b8c61c76764]        
END stack trace  
+1

Il semble que 'H5check_version()' provoque l'abandon. Dans ce cas, la documentation [ici] (https://support.hdfgroup.org/HDF5/doc1.6/RM_H5.html#Library-VersCheck) explique l'erreur. – Gribouillis

+0

Il est en effet C++ utilisant la version 8 de h5 et python essayant d'importer la version 7 de h5. Essayer de trouver une solution avec la liaison. – lr100

Répondre

0

Pas une solution, mais une solution possible, j'utilisé dans le passé: au lieu d'appeler PyImport_Import(), ou avant de l'appeler, exécutez

PyRun_SimpleString("import h5py"); 

Si cela réussit, il se chargera h5py dans sys. modules, et l'importation ultérieure va simplement chercher le module dans ce dictionnaire.

+0

C'était une bonne idée, malheureusement pour moi, elle produit la même erreur. – lr100