Your makefile is broken, or at least not suitable for parallel builds.

You should add .NOTPARALLEL: to it. That's the minimal change that will fix it. 
A makefile with the .NOTPARALLEL: target will not be parallelized even if -j is 
requested on the command line or via the environment.

Why it's broken is that you have multiple rules that update the same object. 

An archive should be built by exactly one rule which has all the prerequisites 
that are going into the archive.

On August 10, 2024 4:04:13 AM PDT, Navin P <navinp0...@gmail.com> wrote:
>Hi,
>   I ran multiple instances of ar during a parallel build and they were
>updating different object files using ar rv sometimes the same object file
>again.
>
>When i run make -j1 i find all the object files  libx.a but when i do make
>-j8 i find some missing object files inside libx.a.
>
>Then i looked at ar.c and found that there is no synchronization between 2
>instances of ar on same library. The problem is that makefile is generated
>and  there are lots of bash scripts doing that.
>
>Is there any way to fix the problem?
>1. Without changing makefile
>2. With changing the makefile in long term.
>
>Regards,
>Navin

Reply via email to