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?

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


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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.