python调用lib_Python可执行文件找不到libpython共享库

戴上我的掘墓者帽子...

我发现解决此问题的最佳方法是在编译时。由于您是一个设置前缀,因此无论如何最好还是明确告诉可执行文件在哪里可以找到其共享库。与OpenSSL和其他软件包不同,Python并没有为您提供出色的configure指令来处理备用库路径(并非每个人都是您所知道的root。)在最简单的情况下,您需要做的是:

./configure --enable-shared \

--prefix=/usr/local \

LDFLAGS="-Wl,--rpath=/usr/local/lib"

或者,如果您更喜欢非Linux版本:

./configure --enable-shared \

--prefix=/usr/local \

LDFLAGS="-R/usr/local/lib"

“ rpath”标志告诉python它具有在特定路径中需要的运行时库。您可以进一步利用此想法来处理安装到与标准系统位置不同的位置的依赖项。例如,在我的系统上,由于我没有超级用户访问权限,并且需要进行几乎完全独立的Python安装,因此我的configure行如下所示:

./configure --enable-shared \

--with-system-ffi \

--with-system-expat \

--enable-unicode=ucs4 \

--prefix=/apps/python-${PYTHON_VERSION} \

LDFLAGS="-L/apps/python-${PYTHON_VERSION}/extlib/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/extlib/lib" \

CPPFLAGS="-I/apps/python-${PYTHON_VERSION}/extlib/include"

在这种情况下,我在编译库,Python使用(如ffi,readline等)到extlib蟒蛇目录树本身的目录。这样,我可以将python-$ {PYTHON_VERSION}目录焦油放置在任何地方,它将“起作用”(前提是您不遇到libc任何libm冲突)。当您尝试在同一盒子上运行多个版本的Python时,这也很有帮助,因为您无需不断更改LD_LIBRARY_PATH或担心选择错误版本的Python库。

编辑:忘了提,如果你不设定编译会抱怨PYTHONPATH环境变量,您所使用的作为前缀,并且无法编译某些模块,例如,延长上面的例子中,设置PYTHONPATH在上使用的前缀以export PYTHONPATH=/apps/python-${PYTHON_VERSION}... 为例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值