Comment compiler une bibliothèque statique sous linux?
J'ai une question: comment compiler une bibliothèque statique sous linux avec gcc, c'est-à-dire que je dois compiler mon code source dans un fichier nommé out.A. est-il suffisant de simplement compiler avec la commande gcc -o out.a out.c? Je ne suis pas tout à fait familier avec gcc, j'espère que n'importe qui peut me donner un coup de main.
3 réponses
Voir créer une bibliothèque partagée et statique avec le compilateur gnu [gcc]
gcc -c -o out.o out.c
-c signifie créer un fichier objet intermédiaire, plutôt qu'un exécutable.
ar rcs libout.a out.o
Cela crée la bibliothèque statique.  r signifie insérer avec remplacement, c signifie créer une nouvelle archive, et s signifie écrire un index.  Comme toujours, consultez la page de manuel   pour plus d'informations.
Voici un exemple complet de 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)
Expliquer le makefile:
- 
target: prerequisites- la tête de la règle
- 
$@- désigne la cible
- 
$^- signifie Toutes les conditions préalables
- 
$<- signifie Juste la première condition préalable
- 
ar- Un outil Linux pour créer, modifier et extraire des archives voir les pages de manuel pour plus d'informations . Les options dans ce cas signifient:- 
r- remplacer fichiers existant dans l'archive
- 
c- créer une archive si elle n'existe pas déjà
- 
s- créer un index de fichier objet dans l'archive
 
- 
Pour conclure: La bibliothèque statique sous Linux n'est rien de plus qu'une archive de fichiers de l'objet.
Principal.c en utilisant la lib
#include <stdio.h>
#include "lib.h"
int main ( void )
{
    fun1(10);
    fun2(10);
    return 0;
}
Lib.h l'en-tête principal libs
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
Lib1.c première lib source
#include "lib1.h"
#include <stdio.h>
void fun1 ( int x )
{
    printf("%i\n",x);
}
Lib1.h l'en-tête correspondant
#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 deuxième source lib
#include "lib2.h"
#include <stdio.h>
void fun2 ( int x )
{
    printf("%i\n",2*x);
}
Lib2.h l'en-tête correspondant
#ifndef LIB2_H_INCLUDED
#define LIB2_H_INCLUDED
#ifdef __cplusplus
   extern “C” {
#endif
void fun2 ( int x );
#ifdef __cplusplus
   }
#endif
#endif /* LIB2_H_INCLUDED */
Générez les fichiers objet avec gcc, puis utilisez ar pour les regrouper dans une bibliothèque statique.