2013-04-30 11 views
5

C++ xcode uygulamam için bazı statik kitaplıklardan (kendi kütüphanelerim) tüm seçilmemiş sembollere bağlanmaya çalışıyorum. 'Strip' ile ilgili tüm özellikleri denedim ('strip' özelliklerini arayarak), ancak, özellikle sınıflar, ilgisiz semboller bağlı değildir.X ++ 'da C++ ölü kod sıyırma nasıl devre dışı bırakılır

Ayrıca -r bağlayıcı bayrak denedim, ama ': -r ve -dead_strip birlikte kullanılamaz ld'

Ben bağlayıcı bayrak '-no_dead_strip' ekleyerek denedim ama sonra bağlayıcı bana '-no_dead_strip' söyler : o zaman bağlayıcı yalnızca şikayet göz ardı edilir.

Aynı sonuçları "Apple LLVM" ve "LLVM GCC" ile de elde ediyorum.

Yani, sorum şu: tüm ölü kodların sıyırmasını kapatmak ve bağlanacak olan ilgisiz sınıfları zorlamak için hangi bağlayıcı bayrağını veya hedef özelliklerini kullanmalıyım?

+0

Belki de '--whole-archive' bağlayıcı bayrağını deneyiniz? –

+0

Android'in NDK'sı, 'native glue' (statik kütüphane) 'de, uygulama içermeyen app_dummy() 'adlı boş bir fonksiyon içeriyor. Bunu istemci tarafından (söz konusu kitaplığa karşı bağlantılar) çağırmak, bu derleme birimindeki sembollerin sıyrılmasını önler. Daha zarif bir yöntem arıyordum ama hiç yokmuş gibi görünüyor. – pauluss86

cevap

6

Standart bağlantı mekanizması - .a dosyasını bağlamak için -l seçeneğini kullanmak, kullanılmayan nesne dosyalarını akıllıca filtreleyecektir, bu nedenle, sonuçta ortaya çıkan ikilide sembollerin bulunmamasının nedeni, aslında . -force_load libraryarchive, gibi kullanılabilir: -Wl,-force_load,libfoobar.alibfoobar.a Eğer tüm semboller almak istiyorum arşiv tek arşivden tüm sembolleri almak istiyorsanız içinde

bağlantılı, bayrağa kullanabilirsiniz. Eğer gcc/clang bayrak -Wl,-all_load onu sürüş konum -all_load veya:

tüm arşivlerinden tüm sembolleri almak için, bağlayıcı işareti kullanmalısınız.

Yine de çirkin sembol tabloları üretiyor!

+1

'Dead Code Stripping' == Hayır ve 'Dead-Strip Giriş ve Şartları Yok' == Evet, işe yaramadı. Ancak '-all_load' linker bayrağını eklediğimde her şey mükemmel çalıştı. Teşekkürler!! –

İlgili konular