首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python在/usr/lib/x86_64-linux-gnu中找不到ldconfig -p确实找到的库

Python在/usr/lib/x86_64-linux-gnu中找不到ldconfig -p确实找到的库
EN

Stack Overflow用户
提问于 2016-05-03 18:57:53
回答 1查看 1.2K关注 0票数 0

我正在尝试使用python模块cairocffi。我在x86-64上使用Debian (拉伸),所以我安装了apt包libcairo2-dev,并使用pip安装了cairocffi python包。一切进展顺利。但是,当我试图导入它时,它无法加载模块:

代码语言:javascript
复制
$ python -c "import cairocffi; print('OK')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 46, in <module>
    cairo = dlopen(ffi, 'cairo', 'cairo-2')
  File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 43, in dlopen
    raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2

然而,ldconfig确实知道libcairo.so

代码语言:javascript
复制
$ sudo ldconfig -p | grep cairo
        libpangocairo-1.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0
        libpangocairo-1.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so
        libcairo.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so.2
        libcairo.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so
        libcairo-script-interpreter.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so.2
        libcairo-script-interpreter.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so
        libcairo-gobject.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2
        libcairo-gobject.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so

当我使用修改后的LD_LIBRARY_PATH运行python时,它可以工作:

代码语言:javascript
复制
$ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu python -c "import cairocffi; print('OK')"
OK

我不想为了可伸缩性和可维护性而在修改后的LD_LIBRARY_PATH上运行python来运行这个脚本,但我不明白为什么它没有获得动态链接器显然知道的库。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-08 21:17:48

原来,在我的/usr/lib中隐藏了一个旧的/usr/lib(它是libcairo的依赖项),并且在安装libcairo的文件夹中有一个更新的lib像素人。因此,当LD_LIBRARY_PATH被设置为libcairo的位置时,它会捡起新的libpixman,而当它没有设置时,它会捡起旧的。从/usr/lib中删除旧的libpixman修复了所有的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37012287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档