SDK компилятора Matlab-Python завершается с ошибкой «неопределенный символ: XML_SetHashSalt» - PullRequest
0 голосов
/ 21 мая 2018

Я работаю над 64-битной Ubuntu 16.04 с Matlab R2018a и использую Python 3.6 (и 3.5 и 2.7 установлены, но не использую).

У меня есть код Matlab, который я пытаюсь вызвать из Python с помощьюи следуйте инструкциям в Matlab Compiler SDK для Python .Я следую всем инструкциям, приведенным в этой ссылке, и создаю установщики Matlab-Python-оболочки (web) и устанавливаю их. Я изменяю LD_LIBRARY_PATH в соответствии с рекомендациями установщика.Я попробовал пример MagicSquarePkg, который они показали, и он хорошо работал с этим подходом.Однако MagicSquarePkg не использовал никаких функций панели инструментов Matlab;мой код делаетПосле того, как я выполняю эту процедуру с моим кодом, я получаю следующую ошибку:

<username>:~/MatlabWorkspace/rs_cuboid_measure_script_python_attempt2/for_testing$ python3.6

Python 3.6.5 (default, Mar 29 2018, 03:28:50) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import rs_cuboid_measure_script_python *my Matlab module*
Exception caught during initialization of Python interface. Details: 
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0: undefined symbol: 
XML_SetHashSalt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<$HOME>/MatlabWorkspace/rs_cuboid_measure_script_python_attempt2/for_testing/rs_cuboid_measure_script_python/__init__.py", line 283, in <module>
_pir.import_cppext()
File "<$HOME>/MatlabWorkspace/rs_cuboid_measure_script_python_attempt2/for_testing/rs_cuboid_measure_script_python/__init__.py", line 276, in import_cppext
self.cppext_handle = importlib.import_module("matlabruntimeforpython" + self.interpreter_version)
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0: undefined symbol: XML_SetHashSalt

Здесь rs_cuboid_measure_script_python - это мой модуль Matlab, который отлично работает при запуске в Matlab.

Я посмотрел на следующеесоответствующие ответы на различных форумах:

1) https://www.mathworks.com/matlabcentral/answers/267099-matlab-s-python-engine-crashes-minidom (наиболее актуально)

Если я последую совету по этой ссылке и

 import pyexpat 

перед импортоммой модуль, я получаю segfault:

>>> import pyexpat
>>> import rs_cuboid_measure_script_python
Segmentation fault (core dumped)

2) Сбой приложения Python с ошибкой "ImportError: pyexpat.x86_64-linux-gnu.so: неопределенный символ: XML_SetHashSalt"

Основываясь на этой ссылке, зависимости:

<username>:/usr/lib/x86_64-linux-gnu$ ldd libpython3.6m.so.1.0

linux-vdso.so.1 =>  (0x00007ffed491a000)
libexpat.so.1 => /usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64/libexpat.so.1 (0x00007f90cb2b4000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f90cb09a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f90cae7d000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f90cac79000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f90caa76000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f90ca76d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f90ca3a3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f90cbbd1000)

3) Основываясь на предложении поддержки Mathworks, я установил python, следуя инструкциям по этой ссылке , но это неизменить что-нибудь.Я получаю ту же ошибку, что и выше

Некоторые другие ссылки, которые могут или не могут иметь отношение:

4) https://askubuntu.com/questions/601106/trying-to-run-hp-toolbox-from-hplip-but-gives-python-errors/601178#601178

5) https://github.com/sqlmapproject/sqlmap/issues/2194 Примечание: Я изменил свою переменную LD_LIBRARY_PATH на:

:~$ echo $LD_LIBRARY_PATH 
:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64/:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64/

на основе инструкций, приведенных на сайте компилятора Matlab SDK (примечание: правильные пути - это не те, которые указаны на ссылке, а те, которыена выводе консоли выше, что подтверждается моей поддержкой Mathworks).

6) https://github.com/opencv/opencv/issues/5445

:/usr/lib/x86_64-linux-gnu$ strings libpython3.6m.so.1.0 | grep Salt
XML_SetHashSalt

Любая помощь в решении этой проблемы приветствуется.

РЕДАКТИРОВАТЬ: Вклдогадка, я запустил мой модуль Matlab с Python2.7 вместо 3.6, и, похоже, он работает с 2.7, но не с 3.6

:~/MatlabWorkspace/rs_cuboid_measure_script_python_attempt2/for_testing$ python2.7
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rs_cuboid_measure_script_python
>>> rs = rs_cuboid_measure_script_python.initialize()
>>> rs.rs_cuboid_measure_script_python()
Not enough input arguments. *this is OK this means my function is getting called*

Ответы [ 2 ]

0 голосов
/ 28 июля 2018

У меня та же проблема.Решено:

cd /full_path_to_matlab_mcrroot/v94/bin/glnxa64
mv libexpat.so.1 libexpat.so.1.NOFIND

Спасибо https://bbs.archlinux.org/viewtopic.php?pid=1112017#p1112017

  • Объяснение:

/full_path_to_matlab_mcrroot/v94/bin/glnxa64/libexpat.so.1 указано libexpat.so.1.5.0

но

/lib/x86_64-linux-gnu/libexpat.so.1 указал на libexpat.so.1.6.0

0 голосов
/ 24 июля 2018

У меня именно эта проблема.Та же ошибка.Использование Python 2.7 вместо Python 3.5 также работало для меня.Спасибо.

Однако мне бы очень хотелось узнать, как заставить его работать на 3.6, поскольку я собираюсь использовать программу Matlab на сервере Django, работающем на 3.6.

...