【发布时间】:2020-07-29 02:34:46
【问题描述】:
我必须编译包含 python 函数的 C 代码。我有一台 Ubuntu 19 64 位机器,我需要为运行 raspbian 拉伸的树莓派 3model b+ 编译 C 代码。为此,我按照https://raspberrypi.stackexchange.com/a/109524/116139 创建了一个带有我需要的拉伸版本的 docker 容器。我的码头工人stats 是:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
14b303f257da DOCKER_CONTAINER 0.00% 13.68MiB / 7.776GiB 0.17% 6.51MB / 26.6kB 19.4MB / 41kB 2
容器环境内部,运行top:
1 root 20 0 4241352 12308 4892 S 0.0 0.2 0:00.50 bash
133 root 0 0 4241096 12048 4972 R 0.0 0.1 0:00.00 top
另外,运行df -h:
Filesystem Size Used Avail Use% Mounted on
overlay 30G 21G 7.6G 74% /
tmpfs 64M 0 64M 0% /dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/sda1 30G 21G 7.6G 74% /etc/hosts
tmpfs 3.9G 0 3.9G 0% /proc/asound
tmpfs 3.9G 0 3.9G 0% /proc/acpi
tmpfs 3.9G 0 3.9G 0% /proc/scsi
tmpfs 3.9G 0 3.9G 0% /sys/firmware
所以,我给了你关于我系统的所有记忆信息。我的 gcc 命令在编译我的大型 C 代码时内存不足:
gcc -Os $(python3-config --cflags --ldflags) CCODE.c -o EXECUTABLE_CODE
cc1: out of memory allocating 66660800 bytes after a total of 290631680 bytes
在 RPi4(4GB RAM)中仅运行 gcc 命令(没有 docker)它可以工作(而在 RPi3b+、1GB RAM 上,它无法报告 cc1: out of memory)。但是,我需要 RPi3,不幸的是它有不同的操作系统。
我被困在这个问题上好几个星期了。有人有任何提示或不同的解决方案吗?感谢您的建议。
【问题讨论】:
-
没有 LPAE 的 32 位 ARM 系统无法处理超过 4 GiB 的内存。如果这是您要达到的限制,那么尝试交叉编译可能是最简单的。如果您不想在交叉编译机器上修复依赖关系,您也可以使用 distcc。我对 Qemu+Docker 的了解不够多,无法评论最大内存、Qemu 如何处理 LPAE、Raspbian 如何处理 LPAE 等。您也可以尝试添加一个大交换分区,看看是否能解决任何问题。
-
感谢@tttapa 的回复但是我认为这不是问题,因为 RPI4 运行 32 位操作系统并且在该环境中 gcc 命令可以正常工作。无论如何,你知道我的 rpi3 的交叉编译(还包括 python.h 库)的一些好的指南吗?
标签: python c docker gcc compiler-errors