Bir sorum var: Linux ile statik bir kütüphane nasıl gcc
derlenir, yani kaynak kodumu out.a adlı bir dosyaya derlemem gerekir. Sadece komutla derlemek yeterli gcc -o out.a out.c
mi? Pek tanıdık değilim gcc
, umarım kimse bana yardım edebilir.
Bir sorum var: Linux ile statik bir kütüphane nasıl gcc
derlenir, yani kaynak kodumu out.a adlı bir dosyaya derlemem gerekir. Sadece komutla derlemek yeterli gcc -o out.a out.c
mi? Pek tanıdık değilim gcc
, umarım kimse bana yardım edebilir.
Yanıtlar:
Bkz . Gnu derleyicisiyle paylaşılan ve statik kitaplık oluşturma [gcc]
gcc -c -o out.o out.c
-c
bir yürütülebilir dosya yerine bir ara nesne dosyası oluşturmak anlamına gelir.
ar rcs libout.a out.o
Bu statik kitaplığı oluşturur. r
yedek ile eklemek, c
yeni bir arşiv oluşturmak ve s
bir dizin yazmak anlamına gelir. Her zaman olduğu gibi, daha fazla bilgi için kılavuz sayfasına bakınız .
İşte tam bir makefile örneği:
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 açıklayan:
target: prerequisites
- kural başlığı$@
- hedef anlamına gelir$^
- tüm önkoşulları ifade eder$<
- sadece ilk ön koşul anlamına gelirar
- arşiv oluşturmak, değiştirmek ve arşivden ayıklamak için bir Linux aracı daha fazla bilgi için kılavuz sayfalarına bakınız . Bu durumda seçenekler:
r
- arşivde bulunan dosyaları değiştirinc
- henüz mevcut değilse bir arşiv oluşturuns
- arşive bir nesne dosyası dizini oluşturmaSonuç olarak : Linux altındaki statik kütüphane, nesne dosyalarının arşivinden başka bir şey değildir.
main.c lib kullanarak
#include <stdio.h>
#include "lib.h"
int main ( void )
{
fun1(10);
fun2(10);
return 0;
}
lib.h libs ana başlığı
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
lib1.c ilk lib kaynağı
#include "lib1.h"
#include <stdio.h>
void fun1 ( int x )
{
printf("%i\n",x);
}
lib1.h ilgili başlık
#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 ikinci lib kaynağı
#include "lib2.h"
#include <stdio.h>
void fun2 ( int x )
{
printf("%i\n",2*x);
}
lib2.h ilgili başlık
#ifndef LIB2_H_INCLUDED
#define LIB2_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun2 ( int x );
#ifdef __cplusplus
}
#endif
#endif /* LIB2_H_INCLUDED */
ar
, statik kitaplık oluşturmanın anahtarı olduğu için açıklama ihtiyacı vardır.
ar
Program, bu mümkün orijinal tek tek dosyaları almak için kılan bir yapı içinde diğer dosyaların bir koleksiyon tutan tek dosyalardır arşivlerinden değiştirir ve özler oluşturur. ar
değiştiricileri belirlediğinizde arşivdeki yer değiştirebilir nesne modüllerinde tanımlanan sembollere bir dizin oluşturur. (bkz. man ar
)
c++
derleyiciyi desteklemek için lütfen başlığınıza aşağıdaki satırları ekleyin : #ifdef __cplusplus extern "C" { #endif . . . #ifdef __cplusplus } #endif
Nesne dosyalarını gcc ile oluşturun, ardından ar
bunları statik bir kitaplıkta paketlemek için kullanın .