Gcc कमांड लाइन का उपयोग करके .c फ़ाइल से .so फ़ाइल बनाएँ


162

मैं लिनक्स डायनेमिक लाइब्रेरी (.so फ़ाइलों) के लिए एक हैलो वर्ल्ड प्रोजेक्ट बनाने की कोशिश कर रहा हूं। इसलिए मेरे पास एक फाइल है hello.c:

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

मैं hello()कमांड लाइन से gcc का उपयोग करके निर्यात करने वाली .so फ़ाइल कैसे बनाऊँ ?

जवाबों:


292

एक साझा लाइब्रेरी बनाने के लिए आपको -fPIC(स्थिति स्वतंत्र कोड) ध्वज के साथ अपना सी कोड संकलित करने की आवश्यकता है ।

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

यह एक ऑब्जेक्ट फ़ाइल (.o) उत्पन्न करेगा, अब आप इसे लेते हैं और .so फ़ाइल बनाते हैं:

gcc hello.o -shared -o libhello.so

संपादित करें : टिप्पणियों से सुझाव:

आप उपयोग कर सकते हैं

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

एक कदम में यह करने के लिए। - जोनाथन लेफ़लर

मैं -Wallसभी चेतावनियों को जोड़ने के लिए, और -gडीबगिंग जानकारी प्राप्त करने के लिए, आपके gccआदेशों को जोड़ने का सुझाव भी देता हूं । - बेसाइल स्टायरनविच


1
आपको पहले gcc -c -fPIC blabla.c -o blabla.o करना होगा, उसके बाद उपरोक्त कमांड।
स्वप्नदोष

57
या gcc -shared -o libhello.so -fPIC hello.cइसे एक स्टेप में करना है।
जोनाथन लेफ़लर

5
मैं -Wallसभी चेतावनियों को जोड़ने के लिए, और -gडीबगिंग जानकारी प्राप्त करने के लिए, आपके gccआदेशों को जोड़ने का सुझाव भी देता हूं ।
बेसिल स्टारीनेविच

सिफारिशों के लिए धन्यवाद, मैंने उन्हें उत्तर में जोड़ा
स्वप्नदोष

3
@ sashoalm .oफ़ाइल मूल रूप से स्रोत फ़ाइल के लिए एक ऑब्जेक्ट फ़ाइल है, उन्हें अंतिम निष्पादन में एक साथ जोड़ने से पहले। इसलिए जब आप gcc -o abc.c abc.oकोई ऑब्जेक्ट फ़ाइल चलाते हैं तो वह जेनरेट हो जाएगी। तब आप इस abc.oफ़ाइल का उपयोग .soफ़ाइल बनाने के लिए कर सकते हैं । इतनी सारी फाइलें बनाने के लिए, आपको बस एक सी लिखा हुआ सही कोड चाहिए .c। पुनश्च: टिप्पणी में अपना संदेह दूर करने के लिए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.