| |
 | Posted by Ali Çehreli (acehreli) in reply to kaaninel | Permalink Reply |
|
Ali Çehreli (acehreli) 
Posted in reply to kaaninel
| Galiba Linux bu konuda Windows'dan daha geride ama kısıtlamanın ne olduğundan emin değilim. En azından bazı kullanımlar çalışıyor. Örnek olarak libm.so içinde tanımlı olan gamma() işlevine bakalım:
import std.stdio;
/*
* libm.so içinde tanımlı olan bir işlev. Aslında D'de ilintileri de var ama
* gösterim amacıyla internet'ten öğrendiğim bildirimini burada elle
* yapıyorum.
*/
extern(C) double gamma(double);
void main()
{
writefln("Sonuç: %s", gamma(1.5));
}
libm.so ayrıcalıklı çünkü şu komutla bile derleniyor:
'
$ dmd deneme.d
'
Bunun nedeni, dmd bazı kütüphaneleri otomatik olarak bağlıyor. Bunu -v ile görebiliriz:
'
$ dmd deneme.d -v
..
gcc deneme.o -o deneme -m64 -L/usr/lib64 -L/usr/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -l:libphobos2.a -lpthread -lm -lrt
'
Yani aslında o en son bağlama adımını gcc'ye yaptırıyor. Oradaki -lm libm.so'yu temsil ediyor. Dolayısıyla, libxyz.so diye bir kütüphane varsa, yukarıdaki son adımdan önce -c ile kendi dosyamızı derlemek ve son adımın sonuna -lxyz eklemek yeterli olmalı:
'
dmd deneme.d -c <-- deneme.o'yu oluşturur
gcc deneme.o -o deneme -m64 -L/usr/lib64 -L/usr/lib -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -l:libphobos2.a -lpthread -lm -lrt -lxyz
'
Yukarıda yazdıklarıma ek olarak DConf'ta Martin Nowak'ın konuşması var. O da dinamik kütüphaneleri çalışma zamanında açmayı anlatıyordu. (Ayrıntılarını hatırlamıyorum. :-/)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
|