Читаем C++. Сборник рецептов полностью

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

Команды для компиляции и компоновки в два этапа представлены в табл. 1.8 и 1.9. В некоторых случаях я устанавливаю для объектного файла расширение o[bj], указывающее, что одна и та же командная строка годится и для Windows, и для Unix, за исключением расширения объектного файла.

Табл. 1.8. Команды для компиляции hello.cpp без компоновки

ИнструментарийКомандная строка
GCCg++ --c -o hello.o hello.cpp
Visual C++cl -с -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t -Fohello hello.cpp
Intel (Windows)icl -с -nologo -EHsc -GR -Zc:forScope Zc:wchar_t -Fohello hello.cpp
Intel (Linux)icpc -с о hello.о hello.cpp
Metrowerksmwcc -c -wchar_t on -cwd include -o hello.o[bj] hello.cpp
Comeaucomo -с -o hello.o[bj] hello.cpp
Borlandbcc32 -c -q -o hello.obj hello.cpp
Digital Marsdmc -c -Ae -Ar -l/stlport/stlport -o hello.obj hello.cpp

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

ИнструментарийКомандная строка
GCCg++ -о 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
Metrowerksmwld -o hello hello.o[bj]
Comeaucomo --no_prelink_verbose -о hello hello.o[bj]
Borlandbcc32 -q -ehello hello.cpp
Digital Marslink -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, а не исполняемым. Большая часть компиляторов для указания выходного файла использует опцию , но Visual C++ и Intel для Windows используют опцию -Fo. Кроме того, все компиляторы, за исключением 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.

<p>1.3. Сборка статической библиотеки из командной строки</p>Проблема

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

Решение

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

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных