Açık cevap, en kapsamlı olmasa da, paket yöneticinizi kontrol etmek, örneğin;
rpm -qi glibc
dpkg -l libc6
(Ne yazık ki, glibc bir pkconfig .pcdosyasına sahip değil , bu yüzden pkgconfig --modversion glibckoşucu değil.) Ayrıca bkz. @ Gnouc'un mükemmel getconfönerisi.
En basit durum, gcc + glibc ve çoğunlukla ilk kullandığım libc.so, buradaki diğer cevapların bazılarında belirtildiği gibi sadece yürütmektir . Herhangi bir argüman iletmeye gerek yoktur, varsayılan olarak sürümünü çıkarır. Bu, glibc-2.1'e (glibc-2.0 seg-faults) kadar uzanır, ancak o zamana glibcbugdek (şimdi emekli olan) betiği onaylamak için betiği kontrol edebilirsiniz ). Bu yöntem aynı zamanda musl-libc'nin (bugün sadece 20 Mart'ta 1.0 olan ) son sürümleri (> 0.9.15) ile çalışır . UClibc ile çalışmıyor, segfaults.
Tam olarak ne yapacağınızı söylemenin basit bir yolu gccderlemek:
#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 ile ilgili GLIBC makrolarını tanımlayanları <stdio.h>içerir , fonksiyon bildirimleri için <features.h>ihtiyacınız vardır <gnu/libc-version.h>.)
Bu, tabii ki doğru derleyiciyi (ve bayrakları) kullandığınızı varsayarsak, daha karmaşık vakalar (çoklu libc'ler ve / veya çoklu derleyiciler) yakalar. (Örnegin eglibc ve glibc arasindakileri ayrilamayacaktir diye dusunuyorum.)
Eğer glibc kullandığınızdan eminseniz (veya eglibc) o ldzaman sürümü de teyit edersiniz (üzgünüm, bu doğru değil).
__GNU_LIBRARY__Tanımlı değilse , hata alırsınız, o zaman B planı zamanıdır.
gcc -dumpmachineyardımcı olabilir, örneğin uclibc için, bunun gibi bir -uclibcsonek vardır gcc -dumpspecs | grep dynamic-linker. Bu aynı zamanda ABI anlamına da gelebilir.
gcc -print-file-name=libc.soderleyicinin " -lc" için hangi dosyayı kullanacağını söyleyecektir , bu, kesinlikle kesinlikle gcc kurulumunuzda düz metin olarak okuyabileceğiniz bir linker-betiğidir. Bu tam yolu gösterecektir libc.so. Eğer böyle bayraklarını geçiriyorsanız, bu da çalışacaktır -m32ya -m64.
Durumunda kullandığınız uClibc (OpenWRT tarafından ve daha kullanıldığı gibi), tanımladığı, __UCLIBC_MAJOR__, __UCLIBC_MINOR__ve __UCLIBC_SUBLEVEL__yanı sıra __UCLIBC__içinde <features.h>kolayca C üzerinde kod parçacığı üzerinde küçük bir varyasyonu kullanılarak algılandığı oluyor böylece. Uyumluluk amacıyla, uClibc ayrıca yukarıda kullanıldığı gibi GNU / GLIBC makrolarını da tanımlayabilir, şu anda glibc-2.2 gibi görünüyor. Şu anda uygulamıyor gnu_get_libc_X()işlevleri, ancak vermez uygulamak getconf(Ben için boş bir cevap verir şüpheli de yanıltabilir hangi getconf GNU_LIBC_VERSIONyüzden onayla olamaz benim yapı env bugün somurtarak edilir.)
Olası bir olayda dietlibc kullanıyorsanız diet -v, sürümü çalıştırıyor görünecektir.
(FWIW, autoconf kullanan yazılımla birkaç yıldan fazla, kontrol edilmeyen gccve g++gereklilikleri kontrol edilen glibc özelliklerinden daha fazla sorun yaşadım .)