जीसीसी के साथ संकलन/लिंकिंग प्रक्रिया को समझने के मेरे प्रयास में यह मेरी दूसरी पोस्ट है। जब मैं निष्पादन योग्य बनाने की कोशिश करता हूं, लिंक समय पर प्रतीकों को हल करने की आवश्यकता होती है, लेकिन जब मैं साझा लाइब्रेरी बनाने का प्रयास करता हूं, तो इस लाइब्रेरी के लिंक समय पर प्रतीक हल नहीं होते हैं। जब मैं इस साझा लाइब्रेरी का उपयोग करके निष्पादन योग्य बनाने की कोशिश कर रहा हूं तो उन्हें शायद हल किया जाएगा। हाथों पर:लिंक समय पर साझा लाइब्रेरी के प्रतीकों का समाधान क्यों नहीं किया जाता है?
bash$ cat printhello.c
#include <stdio.h>
//#include "look.h"
void PrintHello()
{
look();
printf("Hello World\n");
}
bash$ cat printbye.c
#include <stdio.h>
//#include "look.h"
void PrintBye()
{
look();
printf("Bye bye\n");
}
bash$ cat look.h
void look();
bash$ cat look.c
#include <stdio.h>
void look()
{
printf("Looking\n");
}
bash$ gcc printhello.c printbye.c
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/cck21S0u.o: In function `PrintHello':
printhello.c:(.text+0x7): undefined reference to `look'
/tmp/ccNWbCnd.o: In function `PrintBye':
printbye.c:(.text+0x7): undefined reference to `look'
collect2: ld returned 1 exit status
bash$ gcc -Wall -shared -o libgreet printhello.c printbye.c
printhello.c: In function 'PrintHello':
printhello.c:6: warning: implicit declaration of function 'look'
printbye.c: In function 'PrintBye':
printbye.c:5: warning: implicit declaration of function 'look'
तो मेरे सवाल यही वजह है कि इसका समाधान नहीं किया जब मैं एक शेयर की गई लाइब्रेरी जोड़ने हूँ प्रतीक हैं। जब मैं इस लाइब्रेरी को निष्पादन योग्य बनाने के लिए उपयोग करूंगा, तो यह काम (डाउनस्ट्रीम के प्रतीकों को हल करने) की आवश्यकता होगी, लेकिन इसका मतलब है कि हमें यह जानने की जरूरत है कि इस पुस्तकालय का उपयोग करते समय यह पुस्तकालय किस पर निर्भर करता है, लेकिन क्या यह अवांछनीय नहीं है?
धन्यवाद, Jagrati
यह क्यों डाउनवॉट किया गया था? ध्यान दें कि ओएसएक्स पर आप अन्य ऑपरेटिंग सिस्टम जैसे व्यवहार करने के लिए '-flat_namespace' विकल्प का उपयोग कर सकते हैं। लिनक्स। – Troubadour