Как создать статическую библиотеку с g ++? - PullRequest
88 голосов
/ 10 мая 2011

Может кто-нибудь сказать, как создать статическую библиотеку из .cpp и .hpp файла?Нужно ли создавать .o и .a?Я также хотел бы знать, как я могу скомпилировать статическую библиотеку и использовать ее в другом коде .cpp.У меня есть header.cpp, header.hpp . Я хотел бы создать header.a.Проверьте header.a в test.cpp.Я использую g ++ для компиляции.

Ответы [ 3 ]

94 голосов
/ 10 мая 2011

Создать файл .o:

g++ -c header.cpp

добавить этот файл в библиотеку, создавая библиотеку при необходимости:

ar rvs header.a header.o

использовать библиотеку:

g++ main.cpp header.a
35 голосов
/ 10 мая 2011

Вы можете создать файл .a, используя утилиту ar, например:

ar crf lib/libHeader.a header.o

lib - это каталог, содержащий все ваши библиотеки. Хорошей практикой является организация вашего кода таким образом и разделение кода и объектных файлов. Наличие всего в одном каталоге обычно выглядит ужасно. Приведенная выше строка создает libHeader.a в каталоге lib. Итак, в вашем текущем каталоге выполните:

mkdir lib

Затем выполните указанную выше команду ar.

При связывании всех библиотек вы можете сделать это так:

g++ test.o -L./lib -lHeader -o test  

Флаг -L получит g++ для добавления каталога lib/ в путь. Таким образом, g++ знает, какой каталог искать при поиске libHeader. -llibHeader отмечает конкретную библиотеку для связи.

где test.o создается так:

g++ -c test.cpp -o test.o 
23 голосов
/ 10 мая 2011

Может кто-нибудь сказать, как создать статическую библиотеку из файла .cpp и .hpp?Нужно ли создавать .o и .a?

Да.

Создать .o (как обычно):

g++ -c header.cpp

Создать архив :

ar rvs header.a header.o

Тест :

g++ test.cpp header.a -o executable_name

Обратите внимание, что это кажетсяНемного бессмысленно делать архив с одним модулем.Вы могли бы так же легко написать:

g++ test.cpp header.cpp -o executable_name

Тем не менее, я дам вам преимущество сомнения в том, что ваш фактический вариант использования немного сложнее, с большим количеством модулей.

Надеюсь, это поможет!

...