【问题标题】:Linking to specific glibc version in Cython链接到 Cython 中的特定 glibc 版本
【发布时间】: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 副本,没有任何问题。

【问题讨论】:

    标签: cython glibc


    【解决方案1】:

    事实证明这很简单。

    创建以下标头,glibc_fix.h __asm__(".symver memcpy,memcpy@GLIBC_2.2.5")

    然后使用CFLAGS="-include glibc_fix.h" 包含它。这可以设置为环境变量,也可以在setup.py中定义。

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

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2010-10-24
      相关资源
      最近更新 更多