2010-08-08 10 views
5

Bilindiği gibi glibc (ve bildiğim kadarıyla, glibstd ++) sembol versiyonlama mekanizmasını kullanıyor. (Ayrıntılar için bakınız: How can I link to a specific glibc version.)Glibc (glibcxx) sürümünün sürümü nasıl belirlenir?

Soru, GLIBC ve GLIBCXX'in tam sürümlerinin nasıl belirleneceğini libc ve libstdC++ adlarının linker'i tarafından seçilecektir? Örneğin, böyle bir şey nasıl elde edilir:

time -> [email protected]_2_5 
... 
gethostbyname -> [email protected]_2_3 

Neden buna ihtiyacımız var? Glibc/libstdC++ 'nin gerekli sürümlerini minimize etmek istiyorsanız, bu yararlı olabilir.

+0

IIRC dso-howto (http://www.akkadia.org/drepper/dsohowto.pdf) bunun için linker komut dosyalarını kullanma bölümüne sahipti. – ninjalj

cevap

9

Denediğiniz bir şey, binary'nize objdump -T çalıştırıyor.

Eski sembol sürümleriyle bağlantı kurmayı düşünüyorsanız, bu eski sürümlerin eski, farklı yapılara veya diğer tanımlara da bağlı olabileceğini unutmayın. Bunu önlemek için eski, eşleşen üstbilgi dosyaları ve kitaplıklarla derleyin ve bağlantı kurun.

+0

Teşekkürler, jilles. İşe yarıyor. Bir soru daha, hangi dinamik sembolün çağrıldığı kodda yer almalı? Örneğin, 'objdump -T' bazı girişler döndürürse, GLIBCXX_3.4.9 *** Insert *** yazıp, kaynaklarda hangi fonksiyonların bu sembolü kullandığını nasıl anlayacaksınız? – Shcheklein

+0

hmm, gerçekten tüm .o dosyaları üzerinde objdump -t çalıştırmayı ve işlevin referanslarını içerenleri kontrol etmekten daha iyi bir çözüm bilmiyorum. Linker çözülmemiş bir sembolün nerede kullanıldığını bildiği için bu daha iyi yapılabilir. – jilles

+0

Tamam, teşekkürler. Her neyse, başka bir soru ... – Shcheklein