Библиотеки загружаются по требованию на основе символов, требуемых от них, поэтому библиотека, которая предоставляет символ, необходимый для чего-то другого, должна следовать за этим чем-то другим.Это историческое;возможно, современная система должна разрешать символы автоматически, разумно обрабатывая циклы (это и есть причина для правила; вы прерывали циклы зависимостей вручную, указывая библиотеки по порядку и столько раз, сколько необходимо), но g++
следует традиционному правилу, поэтомуработа с вендором ld
с.(GNU ld
не работает везде, поэтому было бы невозможно полагаться на него для разрешения циклов зависимости символов. Существуют также проблемы с загрузкой даже на платформах, где GNU ld
работает.) Точно так же и другие линкеры.ориентированные параметры должны быть указаны в правильном порядке относительно того, на что они влияют (например, параметр -L
должен предшествовать библиотеке, которая находится в указанном каталоге; это может быть важно, если библиотека в одном каталоге скрывает библиотекуто же имя в стандартном каталоге).