Mac OS X 10.6'da GCC 4.6.2 kullanıyorum. Derlediğimde -static-libgcc seçeneğini kullanıyorum, aksi takdirde ikili dosyaları sistemde libgcc arar ve GCC 4.2 üzerinde bir şey OS X'de desteklendiğinden emin değilim. Bu iyi çalışıyor, ama neden libgcc'e ihtiyacım var? Bunu okudum ve GNU dokümanları "hedef işlemcinin doğrudan gerçekleştiremediği aritmetik işlemler" içerdiğini söylüyor. Bu operasyonların ne olduğunu nasıl bilebilirim? Ve neden bu kütüphaneyi dahil etmek zorunda olduğum çok karmaşık? GCC neden bu kütüphane işlevlerine başvurmak yerine kodu doğrudan optimize edemiyor? Biraz kafam karıştı. Bunun hakkında herhangi bir anlayış takdir edilecektir!Gerçekten libgcc'e ihtiyacım var mı?
cevap
Evet, buna ihtiyacınız var. İhtiyacınız yoksa, statik olarak bağlanması zararsızdır. İhtiyacın olup olmadığını -t
link izleme seçeneğini (sanırım) kullanarak söyleyebilirsiniz.
Tek bir talimatta yapamayacağınız çeşitli şeyler vardır (genellikle 32 bit mimarilerde 64 bit işlemler gibi). Bu şeyler yapılabilir, ancak önemsiz sayıda talimatlar kullanırlarsa, hepsinin tek bir yerde toplanması için daha fazla alan etkilidir.
-O0
kullanarak en iyi duruma getirme özelliğini devre dışı bıraktığınızda (aslında bu zaten varsayılan değerdir), GCC hemen hemen her zaman libgcc rutinlerini kullanır.
hızını eniyilemeyi etkinleştirdiğinizde, GCC, komut dizisini doğrudan doğruya kodun içine eklemeyi seçebilir (nasıl yapılacağını bilir). Libgcc sürümlerinin hiçbirini kullanmadan bittiğini görebilirsiniz - daha az libgcc araması kullanacaktır.
boyutu eniyilemelerini etkinleştirdiğinizde, GCC işlev çağrısını tercih edebilir ya da olmayabilir - bu, GCC geliştiricilerinin her durumda en iyi hız/boyut aktarma şeklini düşündüğüne bağlıdır. Hız için optimizasyon yaptığınızda bile, derleyici, bazı işlevlerinin kullanılmasının mümkün olmadığını ve boyutları için bunları optimize edeceğini, hatta PGO kullanıyor olsanız bile bunu en iyi duruma getirebileceğini unutmayın.
Temel olarak, memcpy
veya matematik kitaplığı işlevleriyle aynı şekilde düşünebilirsiniz: derleyici, yargılamanın faydalı olduğu yargılama işlevlerini yerine getirir ve aksi halde kitaplık işlevlerini çağırır. Derleyici, kütüphane tanımına bakmadan standart fonksiyonlar ve libgcc fonksiyonunu "inline" yapabilir, elbette - sadece ne yaptığını "bilir".
Statik veya dinamik libgcc kullanılıp kullanılmayacağı ilginç bir işlemdir. Bir yandan, dinamik (paylaşılan) bir kütüphane tüm sisteminizde daha az bellek kullanır ve önbelleğe alınma olasılığı daha yüksektir. Öte yandan, statik bir libgcc'in daha düşük bir çağrı yükü vardır.
Ancak en önemli şey uyumluluk. Açıkçası libgcc kütüphanesinin programınızın çalışması için mevcut olması gerekir, ancak aynı zamanda uyumlu bir versiyon olmalıdır. Sabit bir GCC sürümü ile Linux dağıtımında sorun yok, ancak statik bağlantı daha güvenli.
Umarım sorularınızı yanıtlar.
Evet! Süper yardımsever. Teşekkürler! – Synthetix
- 1. Gerçekten bir MainWindow.xib dosyasına ihtiyacım var mı?
- 2. Docker sürüsüne gerçekten ihtiyacım var mı?
- 3. Soket programına ihtiyacım var mı?
- 4. iPhone uygulamamda bir EULA'ya ihtiyacım var mı?
- 5. En Kısa Levenshtein Mesafesi? İhtiyacım var mı?
- 6. Graphql ile mongoose'a ihtiyacım var mı?
- 7. ASCII olmayan karakterler için web.config dosyasına ihtiyacım var mı?
- 8. Kaç tane aktiviteye ihtiyacım var?
- 9. perl6: Kullanıcı tanımlı değişkenler için @ -sigil'e ihtiyacım var mı?
- 10. Her istemci bağlantısı için bir SocketAsyncEventArgs öğesine ihtiyacım var mı?
- 11. Bağımlılık Enjeksiyonunu kullanmak için bir çerçeveye ihtiyacım var mı?
- 12. MongoDB ve Whoosh. İkisine de ihtiyacım var mı?
- 13. GeoDjango ile Spatialite için özel yapılandırmaya ihtiyacım var mı?
- 14. Önyükleme 3 Izgara, bir kapsayıcıya ihtiyacım var mı?
- 15. Sentezlemediğim özellikler için ARC anahtar kelimelerine ihtiyacım var mı?
- 16. Jenkins için sonar ve sonar koşucusuna ihtiyacım var mı?
- 17. Sürüm Oluşturma fazladan dosyalar içeriyor, bunlara ihtiyacım var mı?
- 18. Bir vaka ifadesinde başka bir maddeye ihtiyacım var mı?
- 19. AngularJS - $ kapsamına ihtiyacım var. $ Http
- 20. scala.util.automata, scala.util.regexp ve scala.util.grammar'ın gerçekten ihtiyacı var mı?
- 21. Gerçekten sadece 4 Matplotlib Çizgi Stili var mı?
- 22. 100+ MB test görüntüsüne ihtiyacım var
- 23. Word'e dışa aktaracağım bir wiki'ye ihtiyacım var
- 24. Kromlar "appendChild" gerçekten bu kadar yavaş mı?
- 25. "Base :: *; kullanma" gibi bir şeye ihtiyacım var
- 26. iframe'leri kullanmayan bir metin düzenleyicisine ihtiyacım var
- 27. Diziden önce neden yıldıza ihtiyacım var?
- 28. Anahtar Bildirimi ayarlarında yardıma ihtiyacım var
- 29. Javascript görseli yükleme, gömme ihtiyacım var
- 30. Python BMI calc yazarken yardıma ihtiyacım var
Muhtemel Unix'te: http://unix.stackexchange.com/questions/1812/what-does-libgcc-s-so-contain –