如何解决为什么使用distcc编译Python时make抛出错误?
我在 Raspberry Pi 上进行了大量编译工作。我正在考虑使用 distcc 来加快速度。
我关注了这篇文章:https://www.kvaser.com/developer-blog/building-raspberry-pi-using-distcc/
这让我可以将 Arch Linux VM 配置为交叉编译器主机,并将我的 Raspberry Pi 配置为客户端。
就网络而言,设置似乎有效。我可以在 Arch 上使用 tcpdump
来确认在 Pi 上运行 make
时,服务器的 distcc
端口 (3632
) 收到大量请求。
该设置似乎也适用于使用交叉编译器。我的 Arch Linux 没有安装原生的 c++
、cc
、cpp
、g++
或 gcc
二进制文件。如果没有将 PATH
设置为指向交叉编译器,Pi 会抱怨它无法按预期找到 gcc
二进制文件。
我看到的问题是,当我尝试编译 Python 3.7.11
时,我几乎在运行 make 后立即得到这个:
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wno-cast-function-type -Werror=implicit-function-declaration -I. -I./Include -DPy_BUILD_CORE -o Parser/tokenizer.o Parser/tokenizer.c
distcc[31743] ERROR: compile Parser/tokenizer.c on 192.168.1.23 failed
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:140:8: error: unknown type name '_Float32'
/usr/include/stdlib.h:146:8: error: unknown type name '_Float64'
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:158:8: error: unknown type name '_Float32x'
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:233:10: error: unknown type name '_Float32'
/usr/include/stdlib.h:239:10: error: unknown type name '_Float64'
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:251:4: error: unknown type name '_Float32x'
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:316:8: error: unknown type name '_Float32'
/usr/include/stdlib.h:323:8: error: unknown type name '_Float64'
In file included from ./Include/Python.h:34:0,from Parser/tokenizer.c:4:
/usr/include/stdlib.h:337:8: error: unknown type name '_Float32x'
In file included from /usr/include/math.h:389:0,from ./Include/pyport.h:191,from ./Include/Python.h:63,from Parser/tokenizer.c:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:53:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:53:26: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:53:89: error: unknown type name '_Float32'
...
Truncated to adhere to stackoverflow's 30,000 character post limit
...
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:388:31: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:388:47: error: unknown type name '_Float32x'
In file included from /usr/include/math.h:616:0,from Parser/tokenizer.c:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:29: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:44: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:29: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:44: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:29: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:44: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:29: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:44: error: unknown type name '_Float32x'
In file included from /usr/include/math.h:626:0,from Parser/tokenizer.c:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:28: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:42: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:28: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:42: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:28: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:42: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:8: error: unknown type name '_Float32'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:28: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:42: error: unknown type name '_Float64'
In file included from /usr/include/math.h:666:0,from Parser/tokenizer.c:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:8: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:30: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:24:44: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:8: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:30: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:27:44: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:8: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:30: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:30:44: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:8: error: unknown type name '_Float32x'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:30: error: unknown type name '_Float64'
/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h:33:44: error: unknown type name '_Float64'
In file included from ./Include/unicodeobject.h:107:0,from ./Include/Python.h:99,from Parser/tokenizer.c:4:
/usr/include/wchar.h:396:8: error: unknown type name '_Float32'
/usr/include/wchar.h:401:8: error: unknown type name '_Float64'
In file included from ./Include/unicodeobject.h:107:0,from Parser/tokenizer.c:4:
/usr/include/wchar.h:411:8: error: unknown type name '_Float32x'
In file included from ./Include/unicodeobject.h:107:0,from Parser/tokenizer.c:4:
/usr/include/wchar.h:511:8: error: unknown type name '_Float32'
/usr/include/wchar.h:517:8: error: unknown type name '_Float64'
In file included from ./Include/unicodeobject.h:107:0,from Parser/tokenizer.c:4:
/usr/include/wchar.h:529:8: error: unknown type name '_Float32x'
cc1: warning: unrecognized command line option "-Wno-cast-function-type"
make: *** [Makefile:1652: Parser/tokenizer.o] Error 1
如果没有 distcc
,Python 在 Pi 上编译得很好 - 它只需要很长时间。
Host (Arch Linux) 是否缺少一些编译 Python 所需的库?我的印象是它不需要任何东西。
问题是否可能是因为我的 Raspberry Pi 使用内核 5.4.51-v7+
,而 https://github.com/raspberrypi/tools.git
处的工具链似乎只支持 arm-rpi-4.9.3-linux-gnueabihf
?
我在这里很迷茫。任何帮助将不胜感激。
更新:似乎 distcc 正在运行,但编译失败。也许这可以解释它:
在 Debian Buster 中,gcc 编译器和 glibc 已更新至 8.3 版。 git://github.com/raspberrypi/tools.git 中的工具链仍然基于较旧的 gcc 6 版本。这意味着使用 git://github.com/raspberrypi/tools.git 会导致很多编译错误。
-- https://stackoverflow.com/a/58559140/6423456
需要进一步研究。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。