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 .pc
dosyasına sahip değil , bu yüzden pkgconfig --modversion glibc
koş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 glibcbug
dek (ş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 gcc
derlemek:
#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 ld
zaman 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 -dumpmachine
yardımcı olabilir, örneğin uclibc için, bunun gibi bir -uclibc
sonek vardır gcc -dumpspecs | grep dynamic-linker
. Bu aynı zamanda ABI anlamına da gelebilir.
gcc -print-file-name=libc.so
derleyicinin " -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 -m32
ya -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_VERSION
yü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 gcc
ve g++
gereklilikleri kontrol edilen glibc özelliklerinden daha fazla sorun yaşadım .)