在Travis-CI上使用anaconda编译C扩展,缺少__log_finite符号

时间:2014-10-24 22:00:26

标签: travis-ci anaconda python-c-api

在安装了anaconda的情况下,在没有anaconda的情况下编译Travis-CI的C扩展模块会失败。它似乎安装得很好,但是当我尝试导入它时,我收到以下错误:

ImportError: /home/travis/anaconda/lib/python2.7/site-packages/quaternion/numpy_quaternion.so: undefined symbol: __log_finite

可以看到完整的错误here。显然,这看起来像链接器错误,它无法找到glibc(我相信它是找到__log_finite的地方)。但为什么不能找到glibc?

当我在.so文件上运行nm时(通过Travis),它表明__log_finite确实是未定义的,但它不应该通过常规过程找到它吗?

我已尝试通过quaternion安装pip,我已尝试通过直接下载并运行python setup.py install来安装它。两者似乎都有效,因为看起来所有文件都应该是它们应该存在的位置。但两者都失败了,因为他们无法找到这个符号。

我甚至尝试安装完整版本的anaconda(而不仅仅是miniconda,which is recommended)。似乎没什么用。我怎样才能让特拉维斯找到那个符号,这是我通常不得不担心我的发行版?

1 个答案:

答案 0 :(得分:2)

我的-ffast-math包中的quaternion标志似乎存在问题。标志所做的一件事是让代码假设数字是有限的,因此它不使用log函数,而是使用一些log_finite函数,由于某种原因Travis没有 - - 或者其他的东西。无论如何,我让我的numba包在Travis构建中设置了一个环境变量,quaternion包然后在安装时查找,并关闭快速数学。这很不幸,因为这意味着我实际上并没有像实际使用的那样测试代码。但这意味着我的代码构建和测试通过。

互联网上似乎有one mention。或不;我不知道。