GCC compilation within docker with "-j"

Viewed 15

I got strange errors while compiling my project within the docker container when I am using -j option of make.

The errors look like this:

/root/projects/obj/linux_debug/src/myos_make/libmyos.a: error adding symbols: Cannot allocate memory
/usr/protobuf-3.9.2/lib/libprotobuf.a: error adding symbols: Bad address

Compiling the same project inside the container without -j and outside the container with -j passes ok.

The Dockerfile :

#
# This docker must be built from projects/src folder as context
#

FROM ubuntu:18.04 as base

# copy the dockerfile to make it possible to keep track of the cntent of the image
COPY ./docker_build/docker_files/Dockerfile.ubuntu18.04-builder $HOME/.

# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive

# Update Ubuntu Software repository
RUN apt update -y && apt upgrade -y

# Install base utils
RUN apt install -y \
       nano \
       wget \
       sudo \
       curl \
       && apt clean -y 


# Install additional packages needed for build.
RUN apt install -y \
       nasm \
       pkg-config \
       bc \
       python \
       python3 \
       python3-pip \
       sshpass \
       libapr1 \
       libapr1-dev \
       && apt clean -y 

RUN apt install -y  \
       rpm \
       libaio-dev \
       libnuma-dev \
       numactl \
       valgrind \
       openssl \
       libssl-dev \
       ldap-utils \
       libldap2-dev \
       libncurses5-dev \
       libncursesw5-dev \
       uuid-dev \
       ncurses-base \
       expat \
       libfuse-dev \
       cmake \
       build-essential \
       autotools-dev \
       autoconf \
       automake \
       doxygen \
       linux-headers-4.15.0-173-generic \
       g++-multilib \
       lib32z1-dev \
       libasan4 \
       software-properties-common \
       libtool \
       unzip \
       xsltproc \
       && apt clean -y 

RUN ln -s /usr/bin/doxygen /bin/doxygen

# install GCC compiler
RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y \
       && apt update -y\
       && apt install gcc-10 -y \
       && apt install g++-10 -y \
       && apt clean -y && \
       update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 60 --slave /usr/bin/g++ g++ /usr/bin/g++-10 && \
       update-alternatives --config gcc 

RUN curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py && \
       python get-pip.py

RUN ln -sf /usr/local/bin/pip2 /usr/bin/pip
RUN pip install \
       pyyaml \
       jinja2 \
       gcovr


FROM base as env-prepare

COPY external/protobuf /protobuf

RUN cd protobuf  && ./build_proto.sh

FROM base as builder

COPY --from=env-prepare /usr/protobuf-3.9.2/ /usr/protobuf-3.9.2/
COPY --from=env-prepare /usr/protobuf-c-1.3.2/ /usr/protobuf-c-1.3.2/

COPY docker_build/docker-image-release /etc/docker-image-release

ARG UID=1000
USER ${UID}

# This entrypoint is to make everything run inside bash, so the devtools script will alway run before the command
ENTRYPOINT [ "/bin/bash", "-c" ]

0 Answers
Related