Чтение онлайн

на главную - закладки

Жанры

C++. Сборник рецептов

Когсуэлл Джефф

Шрифт:

Табл. 1.9. Команды для компоновки hello.exe или hello

Инструментарий Командная строка
GCC g++ -о hello hello.o
Visual C++ link -nologo -out:hello.exe hello.obj
Intel (Windows) xilink -nologo -out:hello.exe hello.obj
Intel (Linux) icpc -o hello hello.o
Metrowerks mwld -o hello hello.o[bj]
Comeau como --no_prelink_verbose -о hello hello.o[bj]
Borland bcc32 -q -ehello hello.cpp
Digital Mars link -noi hello.obj, hello.exe,NUL,user32.lib kernel32.lib

Например,

чтобы собрать исполняемый файл hello с помощью инструментария GCC, перейдите в директорию, содержащую hello.cpp, и введите следующие команды.

$ g++ -с -о hello.о hello.cpp

$ g++ -о hello hello.о

Теперь программу можно запустить вот так.

$ ./hello Hello, World!

Таблица 1.9 почти идентична табл. 1.6. Имеется только два различия. Во-первых, используется опция – с, говорящая компилятору скомпилировать без компоновки. Во-вторых, указанный выходной файл является объектным файлом hello.obj или hello.o, а не исполняемым. Большая часть компиляторов для указания выходного файла использует опцию – о <file>, но Visual C++ и Intel для Windows используют опцию – Fo<file>. Кроме того, все компиляторы, за исключением Visual C++ и Intel для Windows, требуют, чтобы было указано расширение объектного файла.

Теперь все командные строки в табл. 1.9 должны быть просты и понятны, так что я сделаю только два замечания.

• Компоновщик Digital Mars имеет необычный синтаксис, содержащий шесть полей, разделенных запятыми, которые используются для указания различных типов входных файлов. Сейчас вам требуется знать только то, что первое поле предназначено для объектных файлов, а второе — для выходного файла. Опция – noi говорит компоновщику выполнить компоновку с учетом регистра, что необходимо для программ на C++.

• Компоновщик Borland ilink32.exe использует синтаксис, похожий на Digital Mars. Чтобы упростить командную строку, я использовал для выполнения этапа компоновки компилятор bcc32.exe. Внутри себя bcc32.exe вызывает ilink32.exe.

Смотри также

Рецепты 1.7 и 1.15.

1.3. Сборка статической библиотеки из командной строки

Проблема

Вы хотите использовать свои инструменты командной строки для сборки статической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.1.

Решение

Во-первых, используйте компилятор для компиляции исходных файлов в объектные файлы. Если ваши исходные файлы включают заголовочные файлы, расположенные в других директориях, то для указания компилятору, где искать эти заголовочные файлы, вам может потребоваться использовать опцию – I. За дополнительной информацией обратитесь к рецепту 1.5. Во-вторых, для объединения объектных файлов в статическую библиотеку используйте архиватор.

Чтобы скомпилировать каждый из трех исходных файлов из примера 1.1, используйте командные строки из табл. 1.8, изменив соответственно имена входного и выходного файлов. Чтобы объединить результирующие объектные файлы в статическую библиотеку, используйте команды, приведенные в табл. 1.10.

Табл. 1.10. Команды для создания архива libjohnpaul.lib или libjohnpaul.а

Инструментарий Командная строка
GCC (Unix) Intel (Linux) Comeau (Unix) ar ru libjohnpaul.a john.c paul.о johnpaul.o ranlib libjohnpaul.a
GCC (Windows) ar ru libjohnpaul.a john.o paul.o johnpaul.о
Visual C++ lib -nologo -out:libjohnpaul.lib john.obj paul.obj johnpaul.obj
Comeau (with Visual
С++)
Intel (Windows) xilib -nologo/out:libjohnpaul.lib john.obj paul.obj johnpaul.obj
Metrowerks (Windows) mwld -library -o libjohnpaul.lib john.obj paul.obj johnpaul.obj
Metrowerks (Mac OS X) mwld -library -o libjohnpaul.a john.о paul.o johnpaul.о
Borland tlib libjohnpaul lib /u /a /C +john +paul +johnpaul
Digital Mars lib -c -n libjohnpaul.lib john.obj paul.obj johnpaul.obj

Например, чтобы скомпилировать john.cpp, paul.cpp и johnpaul.cpp в объектные файлы с помощью GCC, перейдите в директорию johnpaul и введите следующие команды, создающие объектные файлы john.о, paul.о и johnpaul.о:

$ g++ -с -о john.o john.cpp

$ g++ -с -о paul.o paul.cpp

$ g++ -с -о johnpaul.о johnpaul.cp
p

Теперь скомпонуйте эти объектные файлы в статическую библиотеку следующим образом.

$ ar ru libjohnpaul.a john.o paul.o johnpaul.о

$ ranlib libjohnpaul.а

Обсуждение

При использовании GCC в Unix для создания статической библиотеки вы используете две отдельные команды: во-первых, вы вызываете архиватор ar, а затем вызываете инструмент с именем ranlib. Опция ru говорит ar добавить указанные объектные файлы в указанный архив, если в нем отсутствуют члены с такими же именами, а обновить существующий член архива только в том случае, если указанный объектный файл новее, чем существующий член архива. Традиционно после создания или обновления архива использовался инструмент ranlib, который создает или обновляет таблицу символов архива, т.е. указатель символов, которые присутствуют в содержащихся в архиве объектных файлах. Сегодня на многих системах архиватор ar самостоятельно заботится об обновлении таблицы символов, так что запуск ranlib необязателен. В частности, это верно для версии GNU ar. Однако на некоторых системах компилятор GCC может использоваться в сочетании с не-GNU-версией ar, и по этой причине для безопасности лучше запустить ranlib.

Как вы можете видеть в табл. 1.10, архиватор Borland tlib использует несколько необычный синтаксис: знак «плюс» перед объектными файлами говорит tlib добавить объектные файлы в библиотеку. Остальные командные строки должны быть вам понятны без пояснений.

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

Поделиться:
Популярные книги

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Planescape: Torment: "Пытка Вечностью"

Хесс Рисс
Фантастика:
фэнтези
5.00
рейтинг книги
Planescape: Torment: Пытка Вечностью

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

От океана до степи

Стариков Антон
3. Игра в жизнь
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
От океана до степи

Возвышение Меркурия. Книга 15

Кронос Александр
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 15

Предложение джентльмена

Куин Джулия
3. Бриджертоны
Любовные романы:
исторические любовные романы
8.90
рейтинг книги
Предложение джентльмена

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Конунг Туманного острова

Чайка Дмитрий
12. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Конунг Туманного острова

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Выбор варианта

Ром Полина
Фантастика:
фэнтези
5.50
рейтинг книги
Выбор варианта

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке