2017-07-31 222 views
0

我用C++应用程序中的单个函数调用单个python模块。我得到一个堆栈跟踪。我将它隔离到python模块中的“import h5py”行。如果我在解释器中运行这个模块和函数,一切都很好。此外,所有其他进口的工作。如果我删除“import h5py”并注释使用它的代码,然后加载模块并从C++调用函数,一切正常。PyImport_Import段错误

也做了一个test.py,果然如果我做这个导入并加载模块在C++中,它有相同的结果。

有没有人见过这样的事情?有没有办法解决它,因为我真的需要在我的python模块中使用h5py,并需要从我们的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

它看起来像'H5check_version()'导致中止。在这种情况下,文档[此处](https://support.hdfgroup.org/HDF5/doc1.6/RM_H5.html#Library-VersCheck)解释了该错误。 – Gribouillis

+0

这确实是C++使用h5版本8和python试图导入h5版本7.试图找出与链接的解决方案。 – lr100

回答

0

不是一个解决方案,但可能的解决方法我在过去使用:而不是调用PyImport_Import()的,或调用它之前,运行

PyRun_SimpleString("import h5py"); 

如果成功,它将在sys加载h5py。模块,然后导入将简单地获取此字典中的模块。

+0

这是一个好主意,不幸的是,它产生了同样的错误。 – lr100