Buat file .so dari file .c menggunakan baris perintah gcc

162

Saya mencoba membuat proyek hello world untuk Linux dynamic libraries (.so files). Jadi saya punya file hello.c:

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

Bagaimana cara membuat file .so yang mengekspor hello(), menggunakan gcc dari baris perintah?

sashoalm
sumber

Jawaban:

291

Untuk menghasilkan pustaka bersama, Anda perlu mengkompilasi kode C Anda terlebih dahulu dengan -fPICbendera (posisi kode independen).

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

Ini akan menghasilkan file objek (.o), sekarang Anda ambil dan buat file .so:

gcc hello.o -shared -o libhello.so

EDIT : Saran dari komentar:

Kamu bisa memakai

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

untuk melakukannya dalam satu langkah. - Jonathan Leffler

Saya juga menyarankan untuk menambahkan -Walluntuk mendapatkan semua peringatan, dan -guntuk mendapatkan informasi debug, ke gccperintah Anda . - Basile Starynkevitch

dreamcrash
sumber
1
Anda harus melakukan gcc -c -fPIC blabla.c -o blabla.o terlebih dahulu, kemudian perintah di atas.
dreamcrash
57
Atau gcc -shared -o libhello.so -fPIC hello.cmelakukannya dalam satu langkah.
Jonathan Leffler
5
Saya juga menyarankan untuk menambahkan -Walluntuk mendapatkan semua peringatan, dan -guntuk mendapatkan informasi debug, ke gccperintah Anda .
Basile Starynkevitch
Terima kasih atas rekomendasinya, saya menambahkannya ke jawaban
dreamcrash
3
.oFile @sashoalm pada dasarnya adalah file objek untuk file sumber, sebelum menghubungkannya bersama, ke file yang dapat dieksekusi. Jadi ketika Anda menjalankan gcc -o abc.c abc.ofile objek akan dihasilkan. Maka Anda dapat menggunakan abc.ofile ini untuk membuat .sofile. Untuk membuat begitu banyak file, yang Anda butuhkan hanyalah kode c yang benar yang ditulis dalam .cfile. PS: Hanya untuk menghapus keraguan Anda dalam komentar.