Книга: Программирование для Linux. Профессиональный подход
Листинг 2.8. (app.c) Второй исходный файл
Листинг 2.8. (app.c) Второй исходный файл
int main() {
return f();
}
Теперь допустим, что файл test.o
включен вместе с другими объектными файлами в архив libtest.a
. Тогда следующая команда не будет работать:
% gcc -о app -L. -ltest app.о
app.о: In function 'main':
app.о(.text+0x4): undefined reference to 'f'
collect2: ld returned 1 exit status
Как следует из сообщения об ошибке, несмотря на то что файл libtest.а
содержит определение функции f()
, компоновщик не нашел ее. Это объясняется тем. что компоновщик анализирует свои аргументы последовательно, слева направо, просматривая архив сразу же, как только он встречается в командной строке. На тот момент компоновщик еще не знал, что в дальнейшем ему встретится ссылка на функцию f()
. Если сделать небольшую перестановку, все заработает:
% gcc -о app арр.о -L. -ltest
Теперь наличие в файле app.о
ссылки на функцию f()
заставляет компоновщик включить в программу объектный файл test.o
из архива libtest.а
.
- Листинг 2.7. (test.c) Первый исходный файл
- Резервное копирование многофайловых баз данных
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Восстановление из резервных копий многофайловых баз данных
- Ответный файл, используемый по умолчанию (csc.rsp)
- Создание файлов с блокировкой
- Файлы базы данных InterBase
- Файлы *.GDB изнутри
- Эффективная работа с временными файлами сортировки
- Второй просмотр: детали
- Единое имя файла параметров InterBase
- Рекомендуемое расширение для файлов баз данных - *.ib