在安装了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)。似乎没什么用。我怎样才能让特拉维斯找到那个符号,这是我通常不得不担心我的发行版?
答案 0 :(得分:2)
我的-ffast-math
包中的quaternion
标志似乎存在问题。标志所做的一件事是让代码假设数字是有限的,因此它不使用log
函数,而是使用一些log_finite
函数,由于某种原因Travis没有 - - 或者其他的东西。无论如何,我让我的numba包在Travis构建中设置了一个环境变量,quaternion
包然后在安装时查找,并关闭快速数学。这很不幸,因为这意味着我实际上并没有像实际使用的那样测试代码。但这意味着我的代码构建和测试通过。
互联网上似乎有one mention。或不;我不知道。