Простой пример позволит вам понять, почему однопроходные линкеры Unix заботятся о порядке.
Предположим, у вас есть main.o (сгенерированный main.cpp) и библиотеки libx.a (без зависимостей) и liby.a (зависит от libx, называемого newRefX) .
Если компоновщик идет в таком порядке, все в порядке, так как компоновщик переходит от 1 к 3:
- main.o refX = undef, refY = undef
- liby.a refX = undef, refY = def, newRefX = undef
- libx.a refX = def, refY = def, newRefX = def
Но если компоновщик идет в таком порядке, вы сталкиваетесь с проблемами с newRefX:
- main.o refX = undef, refY = undef
- libx.a refX = def, refY = undef,
- liby.a refX = def, refY= def, newRefX = undef
Итак, вы можете видеть, что вы хотите, чтобы библиотека самого низкого уровня (та, которая не зависит от других) была последней.