[Gelistirici] 2009 ve paketler
Onur Küçük
onur at pardus.org.tr
28 Oca 2009 Çar 19:41:24 EET
On Tue, 27 Jan 2009 21:04:18 +0100
Emre Erenoglu <erenoglu at gmail.com> wrote:
> 2009/1/27 Serbulent UNSAL <serbulent at pardus.org.tr>
>
> > > Hatta belki hataları sandbox ihlalleri, --as-needed hataları vb.
> > şeklinde
> > > ayrıştırabiliriz faydası olacağını düşünürseniz.
> >
> > [1] http://bugs.gentoo.org/show_bug.cgi?id=129413
>
>
> Valla tam anlamadim ben bu --as-needed olayini ve niye gerekli
> oldugunu, ama elbet sizler anlattikca anlariz. Ilk gordugum, amule
> paketinde denedim ve derleme basarisiz oluverdi :)
Bu biraz da benim hatam, parametreyi alelacele yazmışım yanlış olmuş :)
Normalde ld ye parametre verirken "ld --hede" şeklinde veriliyor,
ancak bu parametre gcc ile verilise (link işlemli gcc ile yapılırsa)
-Wl,--hede şeklinde gcc ye parametre vermek gerekiyor. LDFLAGS da bu
şekilde tanımlanmalı.
Binutils de durum nedir diye biraz araştırdım. LDFLAGS ı şu şekilde
ayarlamayı düşünüyorum
ldflags = -Wl,-O1 -Wl,-z,relro -Wl,--hash-style=gnu -Wl,--as-needed
-Wl,--sort-common
ld için "--enable-new-dtags" ı forced olacak şekilde binutils de
ayarlıyoruz, bunu yine binutils de tutmayı düşünüyorum. Ayrıca binutils
de Bdirect vb. bir iki değişiklik daha yapıyoruz, bunları değiştirmeyi
düşünmüyorum.
--as-needed a gelince;
normalde bir yazılımı belli bir kitaplık ile linklediğinizde, onun
linklendiği alt kitaplıklarla ve sizin linklenmesini istediğiniz bütün
kitaplıklarla linkleniyor (hepsi DT_NEED listesine giriyor). GNU linker
a --as-needed verdiğimizde yazılımlar kullandığı sembol listesine
bakılarak sadece ihtiyacı olan kitaplıklara direkt linklenecek,
anlamsızca "direkt olarak kullanmadığı" kitaplıklara linklenip sisteme
ekstra iş yükü getirmeyecek.
$ ldd -u -r gnome-mplayer-asneeded
Unused direct dependencies:
$ ldd -u -r gnome-mplayer
Unused direct dependencies:
/usr/lib/libatk-1.0.so.0
/usr/lib/libpangocairo-1.0.so.0
/usr/lib/libpango-1.0.so.0
/usr/lib/libcairo.so.2
/usr/lib/libgmodule-2.0.so.0
/lib/libdl.so.2
/lib/librt.so.1
$ objdump -p gnome-mplayer|grep NEED
NEEDED libgtk-x11-2.0.so.0
NEEDED libgdk-x11-2.0.so.0
NEEDED libatk-1.0.so.0
NEEDED libgdk_pixbuf-2.0.so.0
NEEDED libpangocairo-1.0.so.0
NEEDED libpango-1.0.so.0
NEEDED libcairo.so.2
NEEDED libgobject-2.0.so.0
NEEDED libgmodule-2.0.so.0
NEEDED libdl.so.2
NEEDED libgthread-2.0.so.0
NEEDED librt.so.1
NEEDED libglib-2.0.so.0
NEEDED libgio-2.0.so.0
NEEDED libdbus-glib-1.so.2
NEEDED libdbus-1.so.3
NEEDED libasound.so.2
NEEDED libnotify.so.1
NEEDED libgpod.so.3
NEEDED libpthread.so.0
NEEDED libc.so.6
VERNEED 0x0804d2d8
VERNEEDNUM 0x00000003
$ objdump -p gnome-mplayer-asneeded|grep NEED
NEEDED libgtk-x11-2.0.so.0
NEEDED libgdk-x11-2.0.so.0
NEEDED libgdk_pixbuf-2.0.so.0
NEEDED libgobject-2.0.so.0
NEEDED libgthread-2.0.so.0
NEEDED libglib-2.0.so.0
NEEDED libgio-2.0.so.0
NEEDED libdbus-glib-1.so.2
NEEDED libdbus-1.so.3
NEEDED libasound.so.2
NEEDED libnotify.so.1
NEEDED libgpod.so.3
NEEDED libpthread.so.0
NEEDED libc.so.6
VERNEED 0x0804d264
VERNEEDNUM 0x00000003
Bunun getirisi ne olacak dersek, herşeyden önce yazılımların ilk
açılış süresinde ciddi bir iyileşme bekliyorum. lgili dosyaların
diskten okunması, hafızaya yüklenmesi, objenin init işlemi gibi
işlemler program açılışında değil ihtiyaç olduğunda yapılacak.
Performans dışında mesela yanlışlıkla ABI kırma vs. olursa da
beraberinde bilmem kaçıncı dereceden direkt olmayan ters bağımlılığı
indirmemek gibi bir güzelliği de olabilir, daha bir kaç farklı yerde
faydasını görebiliriz. Genel olarak çok daha "responsive" bir sistem
elde edeceğiz
Aslında as-needed ideal bir dünyada olmaması gereken bir flag, sorun
kimlerle linkleneceğini belirleyen yazılımlardan ya da bunları
belirleyen dandik araçlardan (libtool dan siz de nefret ediyorsanız 2
ye basın) kaynaklanıyor. Ancak hepsi düzelene kadar (10 sene diye
tahminde bulunmuşlar bir yerlerde :) bu yöntemle sorunun etrafından
dolaşmak işimize geliyor.
Kısaca paketlerinize as-needed kullandırın, çok sıkışmadıkca lütfen
kapatmayın :)
--
Onur Küçük Knowledge speaks,
<onur.--.-.pardus.org.tr> but wisdom listens
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi