3 回答
当我尝试将我的 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
One possible solution would be to use GCC 4.9 or higher, which does support the -fstack-protector-strong
flag.
我没有升级到 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 执行了正确的构建命令。