Thread overview
Statik Kütüphanenin Her Dilde Kullanılabilmesi
Dec 13, 2016
İbrahim
Dec 14, 2016
erdem
December 14, 2016

Selamün Aleyküm;
Elimde statik bağlanmış kütüphaneler var (libKutuphane.a şeklinde). Bu kütüphaneler C++ ile kodlanmış ve başlık dosyaları sayesinde bu kütüphaneleri kullanabiliyoruz (.h dosyaları). Yalnız bu statik kütüphaneleri ben Delphi, Python ve Java gibi dillerde kullanabilmem nasıl bir yol izleyebilirim?
Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 14, 2016

GNU sistemlerde derlemeli tüm diller çalıştırılabilir dosyayı oluşturmadan önce ara bir adım olarak nesne kütüklerini *.o uzantılı kütük oluşturuyorlar. Bunun bir yararı kuramsal olarak farklı diller tarafından oluşturulmuş *.o dosyalarını kullanarak çalıştırılabilir dosya oluşturmak mümkündür.

Ama pratikte bir sürü derleyici kaynak kodundaki rumuzları değiştirirler. Buna isim süsleme 'name mangling' diyoruz. İsim süsleme nedeniyle C++ ve Fortran nesne kütüklerini bağlamak mümkün değildir.

http://mihaiu.name/2002/library_development_linux/

Derlemeli olmayan diller örneğin Java için ise diyelim ki kullanmak istediğimiz kütüphane C++ ise sarıcı bir işlev yazmak gerekiyormuş.

http://stackoverflow.com/questions/24608851/using-c-library-in-java

Örneğin C ile oluşturulmuş SDL kütüphanesini D'de kullanmak için D ilintileri yazmak gerekiyor.

http://ddili.org/forum/thread/537

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 14, 2016

O dillerde nasıl kullanılabildiğini bilmiyorum ama programları linker (bağlayıcı) ile oluşturulan C, C++, D, ve eminim başka diller genelde birbirlerinin .o ve .a dosyalarını kullanabilirler. Bunun nedeni, .o ve .a dosyaları artık dilden bağımsızdır. Bağlayıcı hepsini bir araya getirir ve programı oluşturur.

Tabii bu iş bu kadar kolay değil: D'de .h olmadığı için D ilintisi yazmak gerekir, D çalışma ortamının (D runtime) özel bir işlev çağrılarak başlatılması şarttır, vs. Program D derleyicisi (ve otomatik olarak çağrılan bağlayıcı) ile oluşturulduğunda D çalışma ortamı zaten başlatılmıştır ama main() işlevin D ile değil, C veya C++ ile oluşturulduğu durumda D çalışma ortamının açıkça başlatılması gerekir.

Yani, bazı dillerde mümkün ama bazı ayrıntıları da düşünmek gerekiyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]