[Gelistirici] PyGObject'te Undefined Symbols
Ozan Çağlayan
ozan at pardus.org.tr
22 Mayıs 2009 Cum 00:32:15 EEST
Gökmen Görgen wrote:
> 2009/5/21 Ozan Çağlayan <ozan at pardus.org.tr <mailto:ozan at pardus.org.tr>>
>
> Çözüm, makefile.am <http://makefile.am> veya makefile.in
> <http://makefile.in> dosyalarında ilgili
> değişikliği(likleri) yaparak bahsi geçen kütüphanenin linklenmesi
> esnasında, undefined symbolleri sağlayan kütüphaneye de linklenmesini
> sağlamak.
>
>
> Cevaplarin icin cok tesekkurler. Yaptigim yamadan hic mi hicbir sey
> anlamadim ama senin dediklerinden ve gosterdigin orneklerden anladigim
> kadariyla birseyler yapmaya calistim ve gercekten ise yaradi. Bununla
> beraber, paketciler icin pisi.conf'a --no-undefined parametresinin
> eklenmesinin de gercekten faydasi olacagini dusunuyorum, boylece bu
> bozuk insanin gozden kacmasi imkansiz oluyor, cunku paketlenmiyor bile.
>
Faydalı olabilirdi baştan as-needed'ı eklerken akıl etsek ama artık
biraz geç kaldık bence, bir de 10 paketin 5inde patlıyor, tecrübesiz
paketçileri oldukça yavaşlatabilir. Dediğin gibi hata açıp altına
girebiliriz.
Ya da devel/ altında dosya olarak commit edelim, daha hızlı ve
interaktif olabilir öyle.
Ben bir betik yazıp farm'da çalıştırıp undefined symbol görünen
paketlerin listesini çıkartırım.
Bu arada yaptığın yamada doğrudan -lpython2.6 yazmak yerine
python-config --libs komutunun çıktısını yazabilirsin. Bunun için
backtick arasına koyman yeterli komutu:
hedehodo_LDFLAGS += hede hodo foo bar `python-config --libs`
gibi. Sürüm bağımsız olmuş olur ve ihtiyaç duyulabilecek diğer
kütüphaneleri de getirir. Gereksiz olanları as-needed zaten kaale
almayacaktır.
Bu arada as-needed'ın da işini doğru yapabilmesi için linking order'ın
düzgün olması lazım. Baktınız ki halen unused deps var bir kütüphanede,
yine makefile'lara dalarak sırayı değiştirip denerseniz büyük ihtimalle
düzelecektir:
gcc (CFLAGS ve LDFLAGS) (*.o ve varsa *.a dosyaları) -lkütüphane1
-lkütüphane2 -lkütüphane3 -lkütüphaneN -o çıktıdosyası
Doğru örnek:
$ gcc -Wl,--as-needed someunit1.o someunit2.o -lm -o program
Yanlış örnek:
$ gcc -Wl,--as-needed -lm someunit1.o someunit2.o -o program
Bazı paketlerde abuk subuk sıralarla çağırılıyor libtool bu yüzden
unused deps kalabiliyor. Yine depoda
find -name "*linking-order*"
diye ararsanız çeşitli yamalar bulabilirsiniz.
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi