【发布时间】:2016-07-15 15:11:00
【问题描述】:
我有一个 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 副本,没有任何问题。
【问题讨论】: