Почему порядок объектных файлов важен для статических библиотек?

Я создаю несколько файлов: file1.c file2.c file3.c Я собираю их, используя gcc -c file1.c и я сделал то же самое для других файлов, и я получаю объектные файлы. Позже я использовал ar инструмент для создания статической библиотеки.

Все работает правильно, но ar имеет опцию

ar -m -a file.o lib.a filetomove.o

переместить объектные файлы в библиотеку, почему порядок объектных файлов важен? Пожалуйста, покажите мне пример, где объектные файлы должны быть в правильном порядке.

1 ответ

Решение

С течением времени это все меньше и меньше проблем, но в течение долгого времени линкеры проходили один проход. Это означает, что если символ был определен в ao и на него есть ссылка в bo, компоновщик должен был "увидеть" bo перед ao, иначе он никогда не найдет определение для ссылки.

В других случаях иногда функция "по умолчанию" предоставляется в библиотеке, которая связана последней. Это популярный метод разработки встраиваемых систем. Вы можете предоставить функцию переопределения, связав ее в статической библиотеке или объектном модуле, но если вы этого не сделаете, последняя библиотека предоставит символ, который удовлетворяет компоновщику.

Другие вопросы по тегам