我有一个Cython扩展,我已经编译了Ubuntu 14并上传为一个Anaconda包。我试图在另一台运行科学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副本,没有任何问题。
发布于 2016-07-15 17:10:35
事实证明,这很简单。
创建以下标题,glibc_fix.h:__asm__(".symver memcpy,memcpy@GLIBC_2.2.5")
然后使用CFLAGS="-include glibc_fix.h"将其包括在内。这可以设置为环境变量,也可以在setup.py中定义。
另外,在这方面,numpy并没有做什么特别的事情。如果我自己编译它,它会链接到我的系统上的更新版本。
https://stackoverflow.com/questions/38399550
复制相似问题