2010-11-24 23 views
21

Farklı platformlar ve işletim sistemleri için kullanılan büyük bir çerçeve için backtrace işlevselliğini uygulamaya çalışıyorum. Bazılarında glibc ile bağlantılıdır, diğerinde ise farklı bir şey (örn. Uclibc) kullanılır. backtrace() işlevi yalnızca öncekinde bulunur.glibc kullanıldığında nasıl söylenir

Glibc'nin kullanılıp kullanılmadığını anlamanın bir yolu var mı? Herhangi bir #define? Glibc kılavuzunda bir cevap bulamadım. Derleme sırasında bağlantı zamanı bilgim olamayacağını biliyorum, ama sanırım dosyaların farklı olması gerekiyor. En azından backtrace bir yerde ilan edilmelidir. Açık bayrakları derleyiciye iletmeye zorlanmadan kontrol etmek istiyorum.

cevap

19

# tanımlar __GNU_LIBRARY__ , features.h içinde (glibc-2.11 ile olan sistemde 6, 2 ve 11) __GLIBC__ ve __GLIBC_MINOR__ bulunmaktadır.

28

features.h dosyasını içerir, ihtiyaç duyduğunuz makroları içerir, örn.

#define __GNU_LIBRARY__ 6 

/* Major and minor version number of the GNU C library package. Use 
    these macros to test for features in specific releases. */ 
#define __GLIBC__  2 
#define __GLIBC_MINOR__ 4 
+3

10 saniye burada ya da yok. Feature dahil olmak üzere benim oyımı alırsınız. H;) –

+0

çok teşekkürler Shawn! –

+0

Ve benden adil bir kaybeden olmak için +1 ;-) – hirschhornsalz

4

önişlemci makroları denetleniyor değil iyi bir çözüm olduğunu. uClibc ve muhtemelen diğer libc uygulamaları, tüm tarayıcıların Kullanıcı Aracısı dizelerinde "Mozilla" içerdiği gibi aynı nedenlerden dolayı glibc'yi (tüm şişirilmiş işlevselliğini sağlamadan) taklit edecek makroları tanımlar: glibc'yi görmeyi bekleyen ve çok sayıda programı kapatan bozuk programlar özellikleri görmüyorlarsa. Bunun yerine, backtrace için problamak üzere bir yapılandırma komut dosyası yazmanız ve yalnızca kullanılabilirse kullanmanız gerekir.

+1

Komut dosyalarını yapılandırmak, Windows ve iPhone ile Linux hedefleri üzerinde oluşturması gereken bir proje için kullanışlı bir çözüm değildir. –

+0

@LoganPickup: Neden göremiyorum. Ancak, bu hedefler üzerinde yapılandırmaya uygun olmayan bir derleme sistemi kullanmakta ısrar ederseniz, aslında tek ve sıkı kontrol edilen ortamlar oldukları için, yalnızca kodlanmış yapılandırma sonuçlarını ('config.h', vb.) Alabilirsiniz. . –

+1

Çoklu platform projeleri için CMake kullanın. İstediğiniz şey sistem iç gözlemidir, komut dosyalarını tek başına yapılandırmaz. CMake çoklu platform sistemi iç gözlemini yapar – Joakim

İlgili konular