Почему порядок объектных файлов важен для статических библиотек?
Я создаю несколько файлов:
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, иначе он никогда не найдет определение для ссылки.
В других случаях иногда функция "по умолчанию" предоставляется в библиотеке, которая связана последней. Это популярный метод разработки встраиваемых систем. Вы можете предоставить функцию переопределения, связав ее в статической библиотеке или объектном модуле, но если вы этого не сделаете, последняя библиотека предоставит символ, который удовлетворяет компоновщику.