make在进入现有容器时导致核心转储

时间:2015-12-24 16:26:30

标签: compilation docker

在vagrant vm中,我执行:

docker exec -it container-id /bin/bash

root@297f6e974824:~$ make

Segmentation fault (core dumped)

什么可能导致此分段错误?

当我使用docker run输入:

docker run --name cc-122711 -P -v /home/vagrant/mm:/home -ti --cap-add NET_ADMIN --cap-add SYS_ADMIN --device /dev/fuse cc /usr/lib/systemd/systemd --system

root@c9f7f3ed6d33:~$ make

make: *** No targets specified and no makefile found. ---it works fine.

作为一种解决方法,我需要docker run每次为编译环境生成新容器。

我重新安装了make 4.1版本(也是4.0版),

sh build.sh,

链接make ... 完成

bash-4.3#pwd /home/tools/make-4.1

bash-4.3#./make

分段错误(核心转储)

bash-4.3#ldd make

    linux-vdso.so.1 (0x00007fff0c9fe000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f729f088000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f729ecea000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f729f28c000)

1 个答案:

答案 0 :(得分:0)

如果你有一个足够好的core(5)文件(这意味着通过setrlimit(2)给出的限制足够大),你可以运行

file core

命令(参见file(1) ...),它可能会为您提供崩溃的可执行文件的名称,以便为您提供核心转储。

显然,core文件来自make本身。这很不寻常(您可以填写错误报告)。请显示相关的Makefile。也许您在容器与libc二进制文件之间存在make不匹配,或者make二进制文件可能已损坏。试试ldd makemake --version。您也可以尝试下载GNU make的源代码并自行编译(GNU make可以构建不带 make