gcc -s -L/usr/lib64 -L. -olinked linked.o libfidoconfig.a -lhusky /usr/bin/ld: linked.o: in function `subscribeCheck': /home/rhs/rpmbuild/BUILD/fidoconf-1.9.20210502/src/linked.c:56: undefined reference to `isLinkOfArea'
...
/home/rhs/rpmbuild/BUILD/fidoconf-1.9.20210502/src/linked.c:140: undefined reference to `readConfig' /usr/bin/ld: /home/rhs/rpmbuild/BUILD/fidoconf-1.9.20210502/src/linked.c:151: undefined reference to `getLink' collect2: error: ld returned 1 exit status make: *** [makefile.inc:57: linked] Error 1 ~~~
Параллелизм тут вредит, в соседнем потоке начинается линковка с libfidoconfig.a, но libfidoconfig.a предыдущий поток ещё до конца не собрал, он собирается уже в самом конце, когда все линковки завершились с ошибкой:
~~~ /home/rhs/rpmbuild/BUILD/fidoconf-1.9.20210502/src/tparser.c:3568: undefined reference to `disposeConfig' collect2: error: ld returned 1 exit status make: *** [makefile.inc:54: tparser] Error 1 ~~~
И лишь в самом конце процесса создаётся libfidoconfig.a:
~~~ ar rs libfidoconfig.a common.o fidoconf.o line.o cfg.o findtok.o areatree.o afixcmd.o afixcmn.o arealist.o version.o grptree.o stat.o ar: creating libfidoconfig.a error: Bad exit status from /var/tmp/rpm-tmp.2kGE6W (%build) ~~~
А иногда libfidoconfig.a успевает собраться до начала линковки, раз на раз не приходится.
Потому что макрос %make_buld раскрывается в параллельный вызов make по числу ядер:
Лечится элементарно -- в секции %build fidoconf.spec %make_build надо вызывать с ключом -j1 чтобы сборка шла не в несколько потоков как сейчас, а в один: