Может кто-нибудь рассказать мне, как создать статическую библиотеку из .cpp и .hpp файла? Нужно ли мне создавать .o и .a? Я также хотел бы знать, как я могу скомпилировать статическую библиотеку и использовать ее в другом .cpp-коде. У меня header.cpp
, header.hpp .
Я хотел бы создать header.a
. Проверьте заголовок .a в test.cpp
. Я использую g++ для компиляции.
Как создать статическую библиотеку с 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
Тем не менее, я дам вам пользу от сомнений в том, что ваш фактический прецедент немного сложнее, с большим количеством модулей.
Надеюсь, это поможет!