स्पष्ट जवाब, हालांकि सबसे व्यापक नहीं है, अपने पैकेज मैनेजर की जांच करना है, जैसे
rpm -qi glibc
dpkg -l libc6
(अफसोस की बात है, glibc के पास एक pkconfig .pcफ़ाइल नहीं है , इसलिए pkgconfig --modversion glibcवह एक गैर-धावक है।) @ Gnouc का उत्कृष्ट getconfसुझाव भी देखें ।
सरलतम मामला, gcc + glibc के साथ, और जो मैं ज्यादातर उपयोग करता हूं, वह केवल निष्पादित करने के लिए है libc.so, जैसा कि यहां कुछ अन्य उत्तरों में उल्लिखित है। किसी भी तर्क को पारित करने की आवश्यकता नहीं है, यह डिफ़ॉल्ट रूप से इसके संस्करण को आउटपुट करता है। यह glibc-2.1 (glibc-2.0 seg-faults) के रूप में वापस काम करता है, हालांकि वापस तो आप glibcbugसंस्करण की पुष्टि करने के लिए अब (अब सेवानिवृत्त) स्क्रिप्ट की जांच कर सकते हैं । इस विधि भी हाल (> 0.9.15) के संस्करणों के साथ काम करता musl-libc (जो सिर्फ 1.0 आज, 20 मार्च चला गया)। यह uClibc के साथ काम नहीं करता है, यह segfaults है।
यह बताने का एक सरल तरीका कि आपका क्या gccकरने जा रहा है:
#include <gnu/libc-version.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("%s %s\n",gnu_get_libc_version(),gnu_get_libc_release());
printf("glibc v%i %i.%i\n",__GNU_LIBRARY__,__GLIBC__,__GLIBC_MINOR__);
return 0;
}
(glibc के साथ, <stdio.h>जिसमें <features.h>प्रासंगिक GLIBC मैक्रो को परिभाषित किया गया है, आपको <gnu/libc-version.h>फ़ंक्शन घोषणाओं की आवश्यकता है।)
यह अधिक जटिल मामलों (एकाधिक libc, और / या कई संकलक) को पकड़ता है, यह मानते हुए कि आप सही संकलक (और झंडे) का उपयोग कर रहे हैं। (मुझे संदेह है कि यह ईगलिबेक और ग्लिबक के बीच उचित अंतर नहीं करेगा।)
यदि आप निश्चित हैं कि आप glibc (या eglibc) का उपयोग कर रहे हैं तो ldसंस्करण की पुष्टि भी करेगा (क्षमा करें, यह सही नहीं है)।
यदि __GNU_LIBRARY__परिभाषित नहीं किया गया है तो आपको त्रुटियां मिलेंगी, तो यह योजना बी का समय है।
gcc -dumpmachineमदद कर सकते हैं, जैसे uclibc के लिए इसका -uclibcप्रत्यय हो सकता है, जैसा कि हो सकता है gcc -dumpspecs | grep dynamic-linker। यह एबीआई को भी प्रभावित कर सकता है।
gcc -print-file-name=libc.soआपको बताएगा कि कंपाइलर किस फाइल को " -lc" के लिए उपयोग करेगा , यह निश्चित रूप से आपके जीसीसी इंस्टॉलेशन के भीतर एक लिंकर-स्क्रिप्ट है, जिसे आप इसे सादे पाठ के रूप में पढ़ सकते हैं। यही सही रास्ता दिखाएगा libc.so। यह भी काम करेगा यदि आप झंडे की तरह गुजर रहे हैं -m32या -m64।
घटना में आप यूक्लिब का उपयोग कर रहे हैं (जैसा कि OpenWRT और अधिक द्वारा उपयोग किया जाता है), यह परिभाषित करता है __UCLIBC_MAJOR__, __UCLIBC_MINOR__और __UCLIBC_SUBLEVEL__साथ ही __UCLIBC__में <features.h>, इसलिए यह आसानी से उपरोक्त सी कोड स्निपेट पर एक मामूली बदलाव का उपयोग करके पता लगाया जाता है। अनुकूलता के हित में, UClibc GNU / GLIBC मैक्रोज़ को भी परिभाषित कर सकता है जैसा कि ऊपर बताया गया है, यह वर्तमान में glibc-2.2 होने का दिखावा करता है। यह वर्तमान में gnu_get_libc_X()फ़ंक्शंस को लागू नहीं करता है , लेकिन यह लागू होता है getconfजो गलत भी हो सकता है (मुझे संदेह है कि इसके लिए एक खाली उत्तर देता है getconf GNU_LIBC_VERSION, मेरा बिल्ड एनवी आज व्यर्थ है इसलिए मैं पुष्टि नहीं कर सकता।)
असंभावित घटना में आप डाइटलिबक का उपयोग कर रहे हैं , रनिंग diet -vसंस्करण प्रदर्शित करेगा।
(Fwiw, autoconf का उपयोग कर सॉफ्टवेयर के साथ कई वर्षों से मैं अनियंत्रित-के लिए के साथ और अधिक समस्याओं लिया है gccऔर g++साथ की तुलना में आवश्यकताओं की जाँच के लिए glibc सुविधाओं।)