When a parallel make is run (-j > 1), some .o files are not included in libhmmer.a archive, and subsequent linking problems occur. Example error (exact missing object varies): make[1]: Entering directory `/var/tmp/portage/sci-biology/hmmer-3.0_beta1/work/hmmer-3.0b1/src' x86_64-pc-linux-gnu-gcc -std=gnu99 -O2 -pipe -march=nocona -msse2 -DHAVE_CONFIG_H -Wl,-O1 -Wl,--as-needed -L../easel -L. -o hmmalign hmmalign.o -lhmmer -leasel -lm hmmalign.o: In function `main': hmmalign.c:(.text+0xb97): undefined reference to `p7_Fail' hmmalign.c:(.text+0xc3a): undefined reference to `p7_Fail' hmmalign.c:(.text+0xd72): undefined reference to `p7_Fail' ./libhmmer.a(tracealign.o): In function `map_new_msa': tracealign.c:(.text+0x55e): undefined reference to `p7_Die' tracealign.c:(.text+0x693): undefined reference to `p7_Die' ./libhmmer.a(modelstats.o): In function `p7_MeanForwardScore': modelstats.c:(.text+0x6c3): undefined reference to `p7_Die' modelstats.c:(.text+0x6d4): undefined reference to `p7_Die' modelstats.c:(.text+0x6e2): undefined reference to `p7_Die' ./libhmmer.a(modelstats.o):modelstats.c:(.text+0x6f3): more undefined references to `p7_Die' follow collect2: ld returned 1 exit status make[1]: *** [hmmalign] Error 1 make[1]: Leaving directory `/var/tmp/portage/sci-biology/hmmer-3.0_beta1/work/hmmer-3.0b1/src' make: *** [all] Error 2 Here, error.o wasn't included. Relevant line is: /usr/bin/ar rcv libhmmer.a generic_msv.o generic_optacc.o generic_stotrace.o generic_viterbi.o generic_vtrace.o h2_io.o heatmap.o hmmer.o logsum.o modelconfig.o modelstats.o mpisupport.o seqmodel.o tracealign.o p7_alidisplay.o p7_bg.o p7_builder.o p7_domaindef.o p7_gmx.o p7_hmm.o p7_hmmfile.o p7_pipeline.o p7_prior.o p7_profile.o p7_spensemble.o p7_tophits.o p7_trace.o Build is successful with 'make -j1', and that same ar line reads: /usr/bin/ar rcv libhmmer.a build.o emit.o errors.o evalues.o eweight.o generic_decoding.o generic_fwdback.o generic_null2.o generic_msv.o generic_optacc.o generic_stotrace.o generic_viterbi.o generic_vtrace.o h2_io.o heatmap.o hmmer.o logsum.o modelconfig.o modelstats.o mpisupport.o seqmodel.o tracealign.o p7_alidisplay.o p7_bg.o p7_builder.o p7_domaindef.o p7_gmx.o p7_hmm.o p7_hmmfile.o p7_pipeline.o p7_prior.o p7_profile.o p7_spensemble.o p7_tophits.o p7_trace.o Fix is probably somewhere in src/Makefile, should be reported upstream.
Created attachment 202324 [details, diff] Simple Makefile.in patch to include all objects Simple change from $? to $^ in libhmmer.a Makefile rule sufficient to fix? Works for me in several rounds. Was easily reproducible before.
Patch submitted upstream. On a related note, beta2 is available, and final 3.0 should be available soon.
I couldn't reproduce this. Added workaround to disable parallel make as advised by upstream.