Ich habe eine Frage: Wie kompiliert man eine statische Bibliothek unter Linux mit gcc
, dh ich muss meinen Quellcode in eine Datei namens out.a kompilieren. Reicht es aus, einfach mit dem Befehl zu kompilieren gcc -o out.a out.c
? kenne ich mich nicht ganz aus gcc
hoffe jemand kann mir helfen.
Wie kompiliere ich eine statische Bibliothek unter Linux?
Sommer_Mehr_Mehr_Tee
Matthäus Flaschen
Sehen Erstellen einer gemeinsam genutzten und statischen Bibliothek mit dem GNU-Compiler [gcc]
gcc -c -o out.o out.c
-c
bedeutet, eine Zwischenobjektdatei anstelle einer ausführbaren Datei zu erstellen.
ar rcs libout.a out.o
Dadurch wird die statische Bibliothek erstellt. r
bedeutet einfügen mit Ersatz, c
bedeutet, ein neues Archiv zu erstellen, und s
bedeutet, einen Index zu schreiben. Wie immer siehe Manpage Für mehr Information.
-
-o
ist nicht erforderlich. Die Ausgabe ist die gleiche (out.o
)– Roi
6. Februar 2021 um 13:11 Uhr
Alex44
Hier ein vollständiges Makefile-Beispiel:
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)
Erläuterung des Makefiles:
target: prerequisites
– der Regelkopf$@
– bedeutet das Ziel$^
– bedeutet alle Voraussetzungen$<
– bedeutet nur die erste Voraussetzungar
– ein Linux-Tool zum Erstellen, Ändern und Extrahieren aus Archiven Weitere Informationen finden Sie in den Manpages. Die Optionen bedeuten in diesem Fall:r
– Ersetzen Sie Dateien, die im Archiv vorhanden sindc
– Erstellen Sie ein Archiv, falls noch nicht vorhandens
– Erstellen Sie einen Objektdateiindex im Archiv
SchlussfolgernHinweis: Die statische Bibliothek unter Linux ist nichts anderes als ein Archiv von Objektdateien.
Haupt c mit der lib
#include <stdio.h>
#include "lib.h"
int main ( void )
{
fun1(10);
fun2(10);
return 0;
}
lib.h der libs-Hauptheader
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
lib1.c erste lib-Quelle
#include "lib1.h"
#include <stdio.h>
void fun1 ( int x )
{
printf("%i\n",x);
}
lib1.h die entsprechende Überschrift
#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 zweite lib-Quelle
#include "lib2.h"
#include <stdio.h>
void fun2 ( int x )
{
printf("%i\n",2*x);
}
lib2.h die entsprechende Überschrift
#ifndef LIB2_H_INCLUDED
#define LIB2_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun2 ( int x );
#ifdef __cplusplus
}
#endif
#endif /* LIB2_H_INCLUDED */
-
es hätte geholfen, darauf hinzuweisen, was die Befehle tun und was sie erreichen wollen. besonders in diesem Fall die
ar
muss erklärt werden, da es der Schlüssel zum Erstellen der statischen Bibliothek ist.– Jost
1. Juli 2016 um 13:26 Uhr
-
Das
ar
Das Programm erstellt, modifiziert und extrahiert aus Archiven, bei denen es sich um einzelne Dateien handelt, die eine Sammlung anderer Dateien in einer Struktur enthalten, die es ermöglicht, die ursprünglichen einzelnen Dateien abzurufen.ar
erstellt einen Index zu den Symbolen, die in verschiebbaren Objektmodulen im Archiv definiert sind, wenn Sie den Modifikator s angeben. (sehenman ar
)– Alex44
1. Juli 2016 um 18:10 Uhr
-
Bitte fügen Sie zur Unterstützung die folgenden Zeilen zu Ihrem Header hinzu
c++
Compiler:#ifdef __cplusplus extern "C" { #endif . . . #ifdef __cplusplus } #endif
– Behrouz.M
18. August 2016 um 4:27 Uhr
-
Das ist eine brillante Antwort, danke!
– Ilia Sidorenko
30. Dezember 2021 um 12:34 Uhr
Generieren Sie die Objektdateien mit gcc und verwenden Sie sie dann ar
um sie in einer statischen Bibliothek zu bündeln.
überprüfen Dies
– Buchhalter م
14. März 2019 um 6:29 Uhr