链接到Cython

时间:2016-07-15 15:11:01

标签: cython glibc

我有一个Cython扩展,我已经在Ubuntu 14上编译并上传为Anaconda包。我试图在另一台运行Scientific Linux(6?)的机器上安装该软件包,该机器附带了旧版本的glibc。当我尝试导入模块时,我得到一个看起来像这样的错误:

./myprogram: /lib/libc.so.6: version `GLIBC_2.14' not found (required by ./myprogram)

当我说"类似" - " myprogram"实际上是扩展名的.so名称。

据我所知,这个错误是因为我在构建系统上有一个更新版本的glibc,它有memcpy函数的更新版本。

此页面对问题有一个很好的描述,以及一些相当不切实际的解决方案:http://www.lightofdawn.org/wiki/wiki.cgi/NewAppsOnOldGlibc

这里提出了一个更简单的答案:How can I link to a specific glibc version?

我的问题是:如何将此解决方案应用于我的Cython扩展程序?假设__asm__解决方案有效(如第二个链接中所示)什么是将其插入Cython生成的C的最佳方法?

另外,更一般地说,如何让其他模块首先避免这个问题?例如,我安装并运行了预先构建的numpy副本,没有任何问题。

1 个答案:

答案 0 :(得分:0)

事实证明这很简单。

创建以下标题 glibc_fix.h <parent>

然后使用 __asm__(".symver memcpy,memcpy@GLIBC_2.2.5") 加入它。这可以设置为环境变量,或在CFLAGS="-include glibc_fix.h"中定义。

此外,事实证明numpy在这方面没有做任何特别的事情。如果我自己编译它,它会链接到我系统上的新版本。