无法在 Linux 上导入 ctypes

Cannot import ctypes on Linux

我安装了 Linux Ubuntu x64 14.04 和 Python 3.4(Ubuntu 默认安装)。 如果我打开 CudaText 文本编辑器,它无法在控制台中导入 ctypes

>>>> import ctypes
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.4/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ImportError: /usr/lib/python3.4/lib-dynload/_ctypes.cpython-34m-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type

Py3.4好像安装不全?为什么它无法加载 ctypes?

在 Debian Linux 发行版中,例如 Ubuntu、Python 扩展模块是在假设 Python 的符号是全局加载的情况下构建的,因此它们不会明确列出Python 库作为 ELF header 的要求。动态链接的嵌入应用程序需要将 Python 共享库加载到全局符号 table,例如dlopen("libpython3.4m.so", RTLD_GLOBAL | RTLD_NOW).

CudaText editor is using Python for Lazarus. I presume this uses dynlibs 的作者。正如您在源代码中看到的那样,它不会使用 RTLD_GLOBAL 调用 dlopen。默认为 RTLD_LOCAL (0).