Книга: Программирование для Linux. Профессиональный подход
1.2.2. Компоновка объектных файлов
1.2.2. Компоновка объектных файлов
После того как файлы main.c
и reciprocal.cpp
скомпилированы, необходимо скомпоновать их. Если в проект входит хотя бы один файл C++, компоновка всегда осуществляется с помощью компилятора g++
. Если же все файлы написаны на языке С, нужно использовать компилятор gcc
. В нашем случае имеются файлы обоих типов, поэтому требуемая команда выглядит так:
% g++ -о reciprocal main.o reciprocal.o
Опция -о задает имя файла, создаваемого в процессе компоновки. Теперь можно осуществить запуск программы reciprocal
:
% ./reciprocal 7
The reciprocal of 7 is 0.142857
Как видите, компилятор g++
автоматически подключил к проекту стандартную библиотеку языка С, содержащую реализацию функции printf()
. Для компоновки дополнительных библиотек (например, модуля функций графического интерфейса пользователя) необходимо воспользоваться опцией -l
. В Linux имена библиотек почти всегда начинаются с префикса lib
. Например, файл подключаемого модуля аутентификации (Pluggable Authentication Module, РАМ) называется libpam.a
. Чтобы скомпоновать его с имеющимися файлами, введите такую команду:
% g++ -о reciprocal main.o reciprocal.o -lpam
Компилятор автоматически добавит к имени библиотеки префикс lib
и суффикс .a
.
Как и в случае с файлами заголовков, компилятор ищет библиотечные файлы в стандартных каталогах, в частности /lib
и /usr/lib
. Для задания дополнительных каталогов предназначена опция -L
, которая аналогична рассматривавшейся выше опции -I
. Следующая команда сообщает компоновщику о том, что поиск библиотечных файлов нужно осуществлять прежде всего в каталоге /usr/local/lib/pam
:
% g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/pam -lpam
В отличие от препроцессора, автоматически ведущего поиск файлов заголовков в текущем каталоге, компоновщик просматривает лишь стандартные каталоги. Поэтому, если библиотечный файл находится в текущем каталоге, об этом нужно сообщить явно с помощью опции -L
. Например, после выполнения следующей команды компоновщик будет искать в текущем каталоге библиотеку test
:
% gcc -o app app.o -L. -ltest
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Создание файлов с блокировкой
- Рекомендуемое расширение для файлов баз данных - *.ib
- Создание многофайловой базы данных
- Правила именования файлов
- Глава 6 Файловые системы
- 3.4 Сетевая файловая система
- 6.4 Другие файловые системы
- 6.5 Файловая система NTFS
- 6.6 Файловые системы для сетей хранения данных
- Файловые типы