Я вызываю один модуль Python с одной функцией из приложения C ++. Я получаю трассировку стека. Я выделил его в строку «import h5py» в модуле python. Если я запускаю этот модуль и работаю внутри интерпретатора, все в порядке. Кроме того, весь другой импорт работает. Если я удаляю «import h5py» и комментирую код, который его использует, затем загружаю модуль и вызываю функцию из c ++, все работает.
Также сделал test.py и, конечно же, если я делаю этот импорт и загружаю модуль в C ++, он дает тот же результат.
Кто-нибудь видел что-то подобное раньше? Есть ли способ обойти это, потому что мне действительно нужно использовать h5py в моем модуле python и нужно вызвать модуль из нашего приложения 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
Не решение, а возможный обходной путь, который я использовал в прошлом: вместо вызова PyImport_Import()
или, прежде чем вызвать его, запустите
PyRun_SimpleString("import h5py");
Если это удастся, он загрузит h5py в sys.modules, а последующий импорт просто извлечет модуль из этого словаря.
Других решений пока нет …