Python distutils gcc路径

7
我正在尝试交叉编译pycrypto包,虽然我越来越接近目标,但我遇到了一个无法解决的问题。
我想让distutils使用特定的交叉编译gcc-,因此我设置了CC环境变量,并且第一次调用编译器时似乎会尊重该设置,但仅限于第一次。
export CC="/opt/teeos/buildroot/output/host/usr/bin/i586-linux-gcc"
/opt/teeos/buildroot/output/host/usr/bin/i586-linux-gcc -fno-strict-aliasing -fwrapv -Wall -Wstrict-prototypes -fPIC -std=c99 --sysroot=/opt/teeos/buildroot/output/staging -I/opt/teeos/buildroot/output/staging/usr/include/python2.7 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c src/_fastmath.c -o build/temp.linux-i686-2.7/src/_fastmath.o
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-i686-2.7/src/_fastmath.o -lgmp -o build/lib.linux-i686-2.7/Crypto/PublicKey/_fastmath.so
unable to execute gcc: No such file or directory

我暂时移动了系统的gcc,所以它无法被找到。

如何让distutils尊重CC=/opt/buildroot...选项,对于每次调用编译器/设置我想要distutils使用的GCC/LD路径?

1个回答

16

这听起来与我最近在另一个答案中提到的自定义distutils编译器类似。您还需要定义LDSHARED,它是用于生成最终共享对象的命令。看看这是否有效:

>>> from distutils import sysconfig
>>> sysconfig.get_config_var('LDSHARED')
'gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions'
>>> sysconfig.get_config_var('CC')
'gcc -pthread'

然后在CCLDSHARED环境变量中用您想要的编译器及选项替换gcc

% LDSHARED="i586-linux-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions" \
  CC="i586-linux-gcc -pthread" python setup.py build

我现在正在重建我的工具链- 我一直在折腾它,想要一个干净的基础;等它完成后我会尝试这个。这看起来完美!我阅读了distutils文档并谷歌了我能想到的所有东西- 你是从哪里找到这个的? - tMC
很好,希望它能帮到你。我是通过深入了解distutils的内部结构才找到的,这方面我已经做过几次相关工作(如自定义编译器选项等)。 - samplebias
搞定了...但现在我的工具链正在链接错误的库。这以前从未发生过,但那是另一个问题。该死的东西。谢谢! - tMC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接