Gcc komut satırını kullanarak .c dosyasından .so dosyası oluşturun


162

Linux dinamik kütüphaneleri (.so dosyaları) için bir merhaba dünya projesi oluşturmaya çalışıyorum. Yani bir dosya var merhaba.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}

hello()Komut satırından gcc kullanarak dışa aktarılan bir .so dosyasını nasıl oluştururum ?

Yanıtlar:


293

Paylaşılan bir kitaplık oluşturmak için önce C kodunuzu -fPIC(konumdan bağımsız kod) bayrağıyla derlemeniz gerekir .

gcc -c -fPIC hello.c -o hello.o

Bu bir nesne dosyası (.o) oluşturur, şimdi onu alır ve .so dosyasını yaratırsınız:

gcc hello.o -shared -o libhello.so

DÜZENLEME : Yorumlardan öneriler:

Kullanabilirsiniz

gcc -shared -o libhello.so -fPIC hello.c

tek adımda yapmak. - Jonathan Leffler

Ayrıca, -Walltüm uyarıları -galmak ve hata ayıklama bilgilerini gcckomutlarınıza eklemenizi öneririm . - Basile Starynkevitch


1
Önce gcc -c -fPIC blabla.c -o blabla.o, sonra yukarıdaki komutu yapmalısınız.
dreamcrash

57
Veya gcc -shared -o libhello.so -fPIC hello.ctek adımda yapmak.
Jonathan Leffler

5
Ayrıca, -Walltüm uyarıları -galmak ve hata ayıklama bilgilerini gcckomutlarınıza eklemenizi öneririm .
Basile Starynkevitch

Öneriler için teşekkürler, onları cevaba
ekledim

3
@sashoalm .odosyası temelde kaynak dosya için, onları birbirine bağlamadan önce, son yürütülebilir dosya için bir nesne dosyasıdır. Böylece çalıştırdığınızda gcc -o abc.c abc.obir nesne dosyası oluşturulur. Ans sonra bu abc.odosyayı dosya oluşturmak için kullanabilirsiniz .so. Çok fazla dosya oluşturmak için tek ihtiyacınız olan bir .cdosyada yazılmış doğru bir c kodudur . Not: Sadece yorumdaki şüphenizi gidermek için.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.