我正在尝试编译 VLC这个 GitHub 仓库在我的 Allwinner 设备(ARM Cortex-A8 NEON,带有 armhf 内核和大约 380 MB 的 RAM)上,使用提供的说明这里。
我不断遇到段错误,因此我创建了一个如下的交换分区:
root@lianro:~/# dd if=/dev/zero of=/swap bs=1M count=1024
root@linaro:~/# mkswap -c /swap
root@linaro:~/# swapon /swap
它变得更好了;不是在大约一分钟后随机中断,而是在很长时间后随机中断,上次它几乎完成了,但我在最后一个模块上遇到了段错误。
在编译过程中,交换区似乎根本没有被使用。我有足够的可用磁盘空间。
可能存在什么问题?
答案1
如果编译某个模块所需的 RAM 比您实际可用的 RAM 多,则交换将无济于事,因为程序将尝试分配和使用比系统内存多得多的 RAM,而交换无法弥补这一点。Linux 无法换出正在使用的内存。
您可以尝试手动更改崩溃的特定模块的 CFLAGS 或 Makefile 编译规则,使其不执行优化(-O0
)或使用较低级别的优化(例如-O1
或-Os
)。这将在编译期间使用更少的内存,虽然这不是最理想的,但它可能使编译成功。媒体播放器倾向于使用昂贵的优化,这需要大量 RAM,无论是在编译时还是在运行时。