Спецификации библиотеки зависят от позиции с gcc
, она будет вводить неразрешенные символы только в той точке, где указана библиотека.
Поскольку в этот момент вы не указали свой основной объектный файл,Единственный неразрешенный символ - main
.Вам нужно переместить спецификации библиотеки в точку, где будет неразрешенными символами, которые они могут удовлетворить.
Я никогда не понимал, почему gcc
выбрал этот путь, поскольку иногда он приводит кситуации, когда вам нужно перечислить библиотеки более одного раза (например, с циклическими зависимостями).Единственная причина, о которой я когда-либо думал, - это контролировать то, какие библиотеки могут разрешать определенные символы.
Я видел больше «интеллектуальных» компоновщиков, где они просто пакетируют все библиотеки до концазатем просматривайте их снова и снова, пока либо все символы не будут выполнены, либо не будет никакого шанса, что они могут быть.Это экономит много усилий, но вы делаете теряете вышеупомянутый контроль.