2016-03-02 99 views
1

我已经安装了Python 3.4(安装Ubuntu的默认安装)的Linux Ubuntu x64 14.04。 如果我打开CudaText文本编辑器,它不能在控制台输入​​:无法在Linux上导入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

在Debian Linux发行版(比如Ubuntu)中,Python扩展模块的构建假设Python的符号是全局加载的,所以它们不会在ELF头文件中明确列出Python库。动态链接的嵌入式应用程序需要将Python共享库加载到全局符号表,例如, dlopen("libpython3.4m.so", RTLD_GLOBAL | RTLD_NOW)

编辑CudaText的作者正在使用Python for Lazarus。我认为这使用dynlibs。正如你在源文件中看到的那样,它不会通过RTLD_GLOBAL调用dlopen。缺省值是RTLD_LOCAL(0)。