Как скомпилировать статическую библиотеку в Linux?
У меня есть вопрос: как скомпилировать статическую библиотеку в linux с помощью gcc, т. е. мне нужно скомпилировать мой исходный код в файл с именем out.а. Достаточно просто скомпилировать с помощью команды gcc -o out.a out.c
? Я не совсем знаком с gcc, надеюсь, что кто-нибудь может мне помочь.
3 ответа:
посмотреть создание общей и статической библиотеки с компилятором gnu [gcc]
gcc -c -o out.o out.c
-c
означает создание промежуточного объектного файла, а не исполняемого файла.ar rcs libout.a out.o
это создает статическую библиотеку.
r
значит вставить с заменой,c
означает создать новый архив, иs
означает написать индекс. Как всегда, смотрите на странице для получения дополнительной информации.
вот полный пример makefile:
makefile
TARGET = prog $(TARGET): main.o lib.a gcc $^ -o $@ main.o: main.c gcc -c $< -o $@ lib.a: lib1.o lib2.o ar rcs $@ $^ lib1.o: lib1.c lib1.h gcc -c -o $@ $< lib2.o: lib2.c lib2.h gcc -c -o $@ $< clean: rm -f *.o *.a $(TARGET)
объясняя makefile:
target: prerequisites
- глава правления$@
- означает, что элемент$^
- значит, все предпосылки$<
- означает только первое условиеar
- инструмент Linux для создания, изменения и извлечения из архива читать man-страницы для дальнейшего информация. Параметры в этом случае означают:
r
- заменить файлы, существующие внутри архиваc
- создать архив, если он еще не существуетs
- создать индекс объектного файла в архивев заключение: статическая библиотека под Linux-это не более чем архив объектных файлов.
главная.cиспользование Либ
#include <stdio.h> #include "lib.h" int main ( void ) { fun1(10); fun2(10); return 0; }
lib.hглавный заголовок libs
#ifndef LIB_H_INCLUDED #define LIB_H_INCLUDED #include "lib1.h" #include "lib2.h" #endif
lib1.cпервый источник lib
#include "lib1.h" #include <stdio.h> void fun1 ( int x ) { printf("%i\n",x); }
lib1.hсоответствующий заголовок
#ifndef LIB1_H_INCLUDED #define LIB1_H_INCLUDED #ifdef __cplusplus extern “C” { #endif void fun1 ( int x ); #ifdef __cplusplus } #endif #endif /* LIB1_H_INCLUDED */
lib2.cвторой источник lib
#include "lib2.h" #include <stdio.h> void fun2 ( int x ) { printf("%i\n",2*x); }
lib2.hсоответствующий заголовок
#ifndef LIB2_H_INCLUDED #define LIB2_H_INCLUDED #ifdef __cplusplus extern “C” { #endif void fun2 ( int x ); #ifdef __cplusplus } #endif #endif /* LIB2_H_INCLUDED */