我们使用 matlab 的 python 引擎与来自 python 的 matlab 代码进行交互。似乎与使用的 libexpact.so 库有一些冲突。
一个最小的 buggy 示例是:
#!/usr/bin/env python
from xml.dom import minidom
import matlab.engine
a = minidom.parse("solution_example.xml")
print(a)
这会产生输出:
File "./minimal.py", line 9, in <module>
a = minidom.parse("solution_example.xml") File "/usr/lib/python2.7/xml/dom/minidom.py", line 1917, in parse
from xml.dom import expatbuilder File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 32, in <module>
from xml.parsers import expat File "/usr/lib/python2.7/xml/parsers/expat.py", line 4, in <module>
from pyexpat import * ImportError: /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt
但是,当省略 import matlab.engine
行时,程序运行正常。
任何想法可能是什么问题或我们如何调试 python 导入过程?
提前致谢!
最佳答案
今天早上我遇到了同样的错误消息,环顾四周后,我发现这个解决方案适合我。所以我在这里重新发帖。希望这对将来有所帮助。
"It seems that this is caused by library conflicts with libexpat. I did
ldd /usr/lib/python2.7/lib-dynload/pyexpat.so
and realized that my libexpat.so.1 was pointing to /usr/local/lib/libexpat.so.1 rather than /lib/x86_64-linux-gnu/libexpat.so.1 (the former referencing an outdated version, 1.5.2 instead of 1.6.0). I don't know where the libexpat in /usr/local/lib came from.I hide my libexpat files in /usr/local/lib (renamed with .backup appended) and now running
ldd /usr/lib/python2.7/lib-dynload/pyexpat.so
displays the line "libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1" and update-manager works correctly."
关于Python 应用程序崩溃并出现错误 "ImportError: pyexpat.x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35266973/