Как создать статическую библиотеку с g++?

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

Ответ 1

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

g++ -c header.cpp

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

ar rvs header.a header.o

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

g++ main.cpp header.a

Ответ 2

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

ar crf lib/libHeader.a header.o

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

mkdir lib

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

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

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

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

где test.o создается следующим образом:

g++ -c test.cpp -o test.o 

Ответ 3

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

Да.

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

g++ -c header.cpp

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

ar rvs header.a header.o

Test

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

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

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

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

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