Я пытаюсь встроить Python 2.6 в MATLAB (7.12). Я хотел встроить файл mex, написанный на C. Это отлично сработало для небольших простых примеров с использованием скаляров. Однако, если Numpy (1.6.1) все равно импортирован, MATLAB выйдет из строя. Я все равно говорю, потому что я пробовал несколько способов загрузить библиотеки numpy, включая
В модуле Python (.py):
из импорта numpy *
С PyRun_SimpleString
в mex-файле:
PyRun_SimpleString («from numpy import *»);
Вызов функций numpy с помощью Py_oBject_CallObject
:
pOut = PyObject_CallObject (pFunc, pFunc, pFunc, pFunc, pFunc, pFunc, pFunc, pFunc );
Первоначально я думал, что это может быть проблема со встраиванием Numpy в C. Однако Numpy отлично работает при встраивании в простые файлы C, которые скомпилированы из командной строки с помощью переключателя / MD (многопоточность) с Компилятор Visual Studios 2005 C. Затем я подумал, что просто изменю файл make в MATLAB, чтобы включить переключатель / MD. Не повезло, mexopts.bat компилируется с ключом / MD. Я также вручную закомментировал строки в модуле инициализации Numpy, чтобы найти, что приводило к сбою MATLAB. Кажется, что загрузка любого файла с расширением pyd приводит к сбою MATLAB. Первым из таких файлов, загружаемых в NumPy, является multiarray.pyd. Документация MATLAB описывает, как отлаживать файлы mex с помощью визуальных студий, что я сделал и разместил сообщение об ошибке ниже.На данный момент я знаю, что проблема заключается в проблеме с памятью pyd и некотором конфликте с MATLAB. Интересно, что я могу использовать системную команду в MATLAB, чтобы запустить процесс в python, который использует numpy, и никаких ошибок не возникает. Я вставлю ниже сообщение об ошибке от MATLAB, за которым следует вывод DEBUG в визуальных студиях процессов, которые приводят к сбою MATLAB. Однако я не буду вставлять все это, потому что список исключений первого шанса очень длинный. Есть ли какие-либо предложения по решению этой проблемы интеграции?
MATLAB error
Matlab has encountered an internal problem and needs to close
MATLAB crash file:C:\Users\pml355\AppData\Local\Temp\matlab_crash_dump.3484-1:
------------------------------------------------------------------------
Segmentation violation detected at Tue Oct 18 12:19:03 2011
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Default Encoding: windows-1252
MATLAB License : 163857
MATLAB Root : C:\Program Files\MATLAB\R2011a
MATLAB Version : 7.12.0.635 (R2011a)
Operating System: Microsoft Windows 7
Processor ID : x86 Family 6 Model 7 Stepping 10, GenuineIntel
Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
Window System : Version 6.1 (Build 7600)
Fault Count: 1
Abnormal termination:
Segmentation violation
Register State (from fault):
EAX = 00000001 EBX = 69c38c20
ECX = 00000001 EDX = 24ae1da8
ESP = 0088af0c EBP = 0088af44
ESI = 69c38c20 EDI = 24ae1da0
EIP = 69b93d31 EFL = 00010202
CS = 0000001b DS = 00000023 SS = 00000023
ES = 00000023 FS = 0000003b GS = 00000000
Stack Trace (from fault):
[ 0] 0x69b93d31 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00081201 ( ???+000000 )
[ 1] 0x69bfead4 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00518868 ( ???+000000 )
[ 2] 0x69c08039 C:/Python26/Lib/site-packages/numpy/core/multiarray.pyd+00557113 ( ???+000000 )
[ 3] 0x08692b09 C:/Python26/python26.dll+00076553 ( PyEval_EvalFrameEx+007833 )
[ 4] 0x08690adf C:/Python26/python26.dll+00068319 ( PyEval_EvalCodeEx+002255 )
This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.
If this problem is reproducible, please submit a Service Request via:
http://www.mathworks.com/support/contact_us/
A technical support engineer might contact you with further information.
Thank you for your help.
Вывод Visual Studios DEBUGGER
First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x0c12c128 in MATLAB.exe: 0xC0000005: Access violation reading location 0x00000004.
First-chance exception at 0x751d9673 in MATLAB.exe: Microsoft C++ exception: jitCgFailedException at memory location 0x00c3e210..
First-chance exception at 0x751d9673 in MATLAB.exe: Microsoft C++ exception: jitCgFailedException at memory location 0x00c3e400..
First-chance exception at 0x69b93d31 in MATLAB.exe: 0xC0000005: Access violation writing location 0x00000001.
> throw_segv_longjmp_seh_filter()
throw_segv_longjmp_seh_filter(): invoking THROW_SEGV_LONGJMP SEH filter
> mnUnhandledWindowsExceptionFilter()
MATLAB.exe has triggered a breakpoint