Порядок библиотек в командной строке gcc важен - вам нужно перечислить библиотеки в порядке зависимости. Если у вас есть циклические зависимости, вам может потребоваться перечислить хотя бы одну библиотеку дважды, чтобы удовлетворить это требование.
В вашем конкретном случае вы, вероятно, хотите что-то вроде:
$ g++ ... X.o -lB -lA ...