13
4

3 回答 3

23

当我尝试将我的 pandas 版本升级到 0.15.2 时遇到了这个问题

如果您安装 gcc-4.9,您的系统上可能仍然有旧版本的 gcc(在我的情况下为 gcc-4.7)。

我可以想到 3 种方法来解决这个问题:

a) 符号链接 /usr/bin/x86_64-linux-gnu-gcc 到 /usr/bin/x86_64-linux-gnu-gcc-4.9 如果你想更有条理地使用update-alternatives,请参阅https://askubuntu .com/questions/26498/choose-gcc-and-g-version

b) 弄清楚如何手动指定 pip 使用的编译器并将其设置在某种 .conf 文件中——我还没有检查过这个文件的位置,或者是否有用于 pip 的 CLI 选项来完成等效操作。原则上,创建/编辑 /usr/lib/pythonX.Y/distutils/distutils.cfg 应该这样做。当我尝试使用这种方法时遇到了问题。

c) 编辑 /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py 以反映您更新的编译器

使用 Pip 安装 Python 包时如何使用 MinGW 的 gcc 编译器? https://docs.python.org/2/install/#distutils-configuration-files

我采用了快速而肮脏的解决方案(a)来强制一切正常工作

root@localhost:/home/user1$ rm /usr/bin/x86_64-linux-gnu-gcc
root@localhost:/home/user1$ ln -s /usr/bin/gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
root@localhost:/home/user1$ pip install pandas --upgrade
. . .  pandas compiles with gcc-4.9 here . . . 

让事情回到原来的样子

root@localhost:/home/user1$ rm /usr/bin/x86_64-linux-gnu-gcc
root@localhost:/home/user1$ ln -s /usr/bin/gcc-4.7 /usr/bin/x86_64-linux-gnu-gcc
于 2015-01-25T16:56:42.573 回答
4

One possible solution would be to use GCC 4.9 or higher, which does support the -fstack-protector-strong flag.

于 2014-12-20T14:08:53.147 回答
3

我没有升级到 GCC 4.9,而是试图找到标志的定义位置并将其删除。在 Debian Wheezy 上,我在 /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py 中找到了它,它属于 libpython2.7-minimal 包。我的解决方案是在这个文件中用 -fstack-protector 替换所有出现的 -fstack-protector-strong 。然后 pip install 执行了正确的构建命令。

于 2014-12-29T13:50:13.693 回答