SORU
14 Temmuz 2011, PERŞEMBE


C/C gcc & ld - kullanılmayan simgeleri kaldırma

Benim ciddi bir şekilde çalıştırılabilir (ARM geliştirme) boyutunu optimize etmek istiyorum ve Mevcut yapı planıma (gcc ld) kullanılmayan sembolleri elimden almak olmadığını fark ettim.

arm-strip --strip-unneeded elde edilen yürütülebilir dosyalar / kütüphanelerin kullanımı yürütülebilir çıktı boyutunu değiştirmez(Belki de sadece o zaman hiçbir fikrim yok).

Yol ne olabilireğer (varsa)bina boru hattı değiştirmek, kullanılmayan semboller sonuç dosyası kaldırılır ki?


Bu bile düşünmezdim, ama mevcut gömülü benim çevre çok değil "" ve güçlü tasarruf bile 7* *çok güzel yükleme performans artışı 2M sonuçlar çıktı.

Teşekkür ederim.

Güncelleme:

Ne yazık ki kullanıyorum gcc geçerli sürüm -dead-strip seçeneği yok ve ld -ffunction-sections... --gc-sections sonuç çıktısı için herhangi bir fark yapmaz.

Bu bile gcc ld otomatik olarak kullanılmayan simgeleri (neden onları tutmak için var mı?) şerit gerektiğine emin olduğum için bir sorun oldu, şoktayım.

CEVAP
21 Temmuz 2011, PERŞEMBE


GCC için, bu iki aşamalı olarak gerçekleştirilir:

İlk verileri derlemek ama derleyici çeviri birimi içinde ayrı bir bölüm kodu ayrı söyle. Bu aşağıdaki iki derleyici bayraklarını kullanarak fonksiyonlar, sınıflar, ve harici değişkenler için yapılacaktır:

-fdata-sections -ffunction-sections

Birlikte çeviri birimleri linker optimizasyon bayrağı (bu linker başvurulmayan bölümleri atmak için nedenler) kullanarak bağlantı:

-Wl,--gc-sections

Bir dosya iki fonksiyonları ilan vardı test.cpp adı vardı, ama bir tanesi kullanılmamış olsaydı, gcc aşağıdaki komut ile kullanılmayan bir(g) ihmal diye

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections

(O -Os GCC boyutu için optimize belirten ek bir derleyici bayrak) not

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • rtisticsdev

    rtisticsdev

    31 Mayıs 2012
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009
  • William Hyde

    William Hyde

    23 HAZİRAN 2008