如何使用ctypes加载链接到非默认libc的库?

时间:2018-01-09 21:57:55

标签: python linux ctypes

我正在使用CentOS6.9,我使用python3.6从.so文件加载c库。但是,我遇到了以下错误:

OSError: /lib64/libc.so.6: version 'GLIBC_2.14' not found

我做了一些研究,发现这是因为centOS 6使用的是版本2.12。我从这里(https://stackoverflow.com/a/38317265/8406938)跟踪其中一个帖子在centOS 6中安装GLIBC_2.14,现在可以成功运行外部应用程序,如果它们首先运行时与这个libc链接:

export LD_LIBRARY_PATH=/opt/glibc-2.14

我的问题是在我安装之后,如何在python中使用它,以便我可以通过ctypes加载库,这是我加载的代码:

filepath = os.path.dirname(os.path.join(os.path.realpath(__file__)))
lib = CDLL(os.path.join(filepath, 'lib.so'))

我仍然收到错误

OSError: /lib64/libc.so.6: version 'GLIBC_2.14' not found

我安装2.14之后。我是否需要在python中设置一些东西(比如路径变量)以便使用它?

1 个答案:

答案 0 :(得分:0)

你做不到。该库需要glibc 2.14或更高版本才能在其加载过程中出现,但该过程已在启动期间加载了glibc 2.12。无法同时加载两个版本的glibc。

您的选择是:

  1. 根据系统的libc重建库。

  2. 使用兼容版本的glibc将系统升级到操作系统版本。

  3. 使用LD_LIBRARY_PATH=…启动Python以强制它使用较新版本的glibc。 (除非没有其他选择,否则应避免这样做;它可能会产生意想不到的影响。)