简体   繁体   English

SSL v2未定义符号,Manjaro和Ubuntu

[英]SSL v2 undefined symbol, Manjaro and Ubuntu

I'm going to report a problem quite complex. 我要报告一个非常复杂的问题。

I'm trying to develop a cross-platform python software. 我正在尝试开发一个跨平台的python软件。 I'm on Manjaro Linux, which is an Arch-linux based distribution. 我使用的是Manjaro Linux,它是基于Arch-linux的发行版。

The software is packaged with cx_freeze, to facilitate its distribution. 该软件与cx_freeze打包在一起,以方便其分发。 All the required libraries are bundled in the package, the user just has to execute a binary file to start the program. 所有必需的库都捆绑在软件包中,用户只需要执行一个二进制文件即可启动程序。 On Manjaro, the binary runs well. 在Manjaro上,二进制文件运行良好。

However, when I try it on Ubuntu, I encounter a strange problem: 但是,当我在Ubuntu上尝试时,遇到一个奇怪的问题:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
  File "/tmp/tmpinkmyph0/scripts/gui.py", line 39, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/home/djipey/informatique/python/ChemBrows/my_twit.py", line 13, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 944, in _find_and_load_unlocked
    _call_with_frames_removed(import_, parent)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 222, in _call_with_frames_removed
    return f(*args, **kwds)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/site-packages/twitter/__init__.py", line 19, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/site-packages/twitter/stream.py", line 13, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 666, in _load_unlocked
    module = module_from_spec(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 577, in module_from_spec
    module = spec.loader.create_module(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap_external.py", line 903, in create_module
    _imp.create_dynamic, spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 222, in _call_with_frames_removed
    return f(*args, **kwds)
ImportError: /home/ubuntu/Desktop/ChemBrows-0.9.6.linux-x86_64/ChemBrows-0.9.6.linux-x86_64/_ssl.cpython-35m-x86_64-linux-gnu.so: undefined symbol: SSLv2_method

After a bit of digging, it seems openssl is built without the support of version 2, on Ubuntu. 经过一番挖掘后,似乎在Ubuntu上没有版本2支持的情况下构建了openssl。 What I don't understand, is why the program crashes: as all the libraries are packaged and delivered with my program, it shouldn't call any system libraries. 我不明白的是程序崩溃的原因:由于所有库都与程序一起打包和交付,因此不应调用任何系统库。

To summarize, I don't really understand why my program crashes. 总而言之,我不太了解为什么我的程序崩溃。 Any help would be greatly appreciated. 任何帮助将不胜感激。

EDIT: 编辑:

After installing openssl with version 2 enabled on Ubuntu, it works perfectly. 在Ubuntu上启用版本2安装openssl之后,它可以完美运行。 But the procedure is quite long and hard, I can't ask my future users to do it. 但是该过程非常漫长且艰辛,我无法要求我的未来用户这样做。 So I should probably build python 3 without the support of ssl v2 所以我可能应该在没有ssl v2支持的情况下构建python 3

You can fix this by uninstalling M2Crypto via pip, then installing the package python-m2crypto, and then to make sure install M2Crypto again 您可以通过以下方式解决此问题:通过pip卸载M2Crypto,然后安装软件包python-m2crypto,然后确保再次安装M2Crypto

pip uninstall M2Crypto
apt-get install python-m2crypto
pip install M2Crypto

This solved for me 这为我解决了

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM