एक गतिशील पुस्तकालय बनाना, क्या यह सही रास्ता है?


1

मैं यह जानने की कोशिश कर रहा हूं कि स्टैटिक और डायनेमिक लाइब्रेरी कैसे बना सकते हैं, और मुझे लाइब्रेरी के बारे में अपने शिक्षक को समझने में थोड़ी परेशानी हो रही है। गतिशील पुस्तकालय बनाने का मेरा विचार यह है:

gcc -c main.c -o main.o
gcc -c -fPIC func.c -o func.o
gcc -shared -Wl,-soname,-libfunc.so.1 -o libfunc.so.1.0.1 func.o
ldconfig -n .
ln -sf libfunc.so.1.0.1 libfunc.so
gcc main.o libfunc.so.1.0.1 -o prog1
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

अब मेरे शिक्षक का कहना है कि अंतिम पंक्ति को इस तरह देखना चाहिए

gcc main.o -o prog1 -L. -lfunc

क्या कोई मुझे उन दोनों के बीच सटीक अंतर समझा सकता है? धन्यवाद!

जवाबों:


1

-l<name>केवल एक शॉर्टकट है जो "लुकअप lib<name>.soया lib<name>.aकॉन्फ़िगर लाइब्रेरी पथों में खोजता है", और -L.वर्तमान निर्देशिका को उक्त पथ में जोड़ता है।

बेशक, -lवास्तविक पुस्तकालयों का उपयोग करते समय पसंद किया जाता है, क्योंकि यह पुस्तकालय के पूर्ण पथ को जानने की आवश्यकता को हटाता है और न ही विभिन्न ओएस विवरण (जैसे .soबनाम .dylibबनाम .aबनाम .dll), लेकिन निष्पादन योग्य आउटपुट होने पर कोई अंतर नहीं होना चाहिए।

$ gcc -o out1 main.c libtest.so
$ gcc -o out2 main.c -L. -ltest
$ md5sum out*
b1b8f46bf6091377b202df90d6bd32cc  out1
b1b8f46bf6091377b202df90d6bd32cc  out2

ldदोनों के लंबे विवरण के लिए मैनुअल पेज देखें -lऔर -L

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.