无法在Linux上导入ctypes

时间:2016-03-02 14:38:01

标签: python ctypes

我安装了带有Python 3.4的Linux Ubuntu x64 14.04(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?

1 个答案:

答案 0 :(得分:1)

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

CudaText编辑的作者正在使用Python for Lazarus。我认为这使用dynlibs。正如您在源代码中看到的那样,它不会使用dlopen调用RTLD_GLOBAL。默认值为RTLD_LOCAL(0)。