Wie kompiliere ich eine statische Bibliothek unter Linux?

Lesezeit: 3 Minuten

Benutzeravatar von Summer_More_More_Tea
Sommer_Mehr_Mehr_Tee

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 gcchoffe jemand kann mir helfen.

  • überprüfen Dies

    – Buchhalter م

    14. März 2019 um 6:29 Uhr

Benutzeravatar von Matthew Flaschen
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

Benutzeravatar von Alex44
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 Voraussetzung
  • ar – 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 sind
    • c – Erstellen Sie ein Archiv, falls noch nicht vorhanden
    • s – 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. (sehen man 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.

1425240cookie-checkWie kompiliere ich eine statische Bibliothek unter Linux?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy