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

We use cookies. Read the Privacy and Cookie Policy

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.cpp

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

$ 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.8, 1.11 и 1.16.