Forum: D Programlama Dili RSS
Derlenen programi baska bir bilgisayarda calistirmak
Mengu (Moderatör) #1
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Derlenen programi baska bir bilgisayarda calistirmak
Derlenen dillere yeni oldugum icin (C# ve Java haric) bu konuda bir sorunum var. Mesela Pearl Studio su haliyle kullanilabilir durumda. Linux uzerinde derledim. Cok da guzel calisiyor. Peki ben bu programi bir baska bilgisayarda calistirabilmek icin ne yapmaliyim? D ve gtkD kullaniyorum, bu iki bagimliligi saglamak icin kullaniciya GTK ve DMD mi kurdurmaliyim?
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Standart cevap: Eğer program statik olarak bağlandıysa, yani kullandığı kütüphaneler içine gömüldüyse, başka bir şey gerekmez.

Normalde sonu .a ile biten kütüphaneler işlevlerin bir araya gelmelerinden oluşan basit yapılardır. Onlarla bağlandıysa program tek başına çalışır.

.so ile bağlandıysa, çalışma zamanında o .so dosyasını arayacaktır.

Oluşturduğun programın ismi deneme ise, onu ldd'ye vererek bağımlı olduğu .so dosyalarını öğrenebilirsin:

ldd deneme

Ali
Mengu (Moderatör) #3
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Standart cevap: Eğer program statik olarak bağlandıysa, yani kullandığı kütüphaneler içine gömüldüyse, başka bir şey gerekmez.

Normalde sonu .a ile biten kütüphaneler işlevlerin bir araya gelmelerinden oluşan basit yapılardır. Onlarla bağlandıysa program tek başına çalışır.

.so ile bağlandıysa, çalışma zamanında o .so dosyasını arayacaktır.

Oluşturduğun programın ismi deneme ise, onu ldd'ye vererek bağımlı olduğu .so dosyalarını öğrenebilirsin:

ldd deneme

Ali

ldd Pearl ciktisi bu oldu:

    linux-gate.so.1 =>  (0x00330000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00969000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00f92000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00601000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
    /lib/ld-linux.so.2 (0x00a3c000)

ne yapmam gerekir simdi oyleyse?
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
C veya C++ olsa, derleme satırında -static yazılırdı. dmd'de de -L-static olmalı. Öyle yapınca bağlayıcıdan şu hatayı alıyorum:

/usr/bin/ld: cannot find -lgcc_s

Anlaşılan libgcc_s.a isimli bir dosyayı arıyor. (-l'den sonra gelen ismin başına lib, sonuna da .a ekler.) Belki onu kuran Linux pakedini araştırmak gerek.

Öte yandan, ldd'nin gösterdiği kütüphaneler her Linux sisteminde bulunan dosyalar. Yani belki de bir sorun yoktur. :)

Daha fazla öğrenince yazacağım.

Ali
Mengu (Moderatör) #5
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
C veya C++ olsa, derleme satırında -static yazılırdı. dmd'de de -L-static olmalı. Öyle yapınca bağlayıcıdan şu hatayı alıyorum:

/usr/bin/ld: cannot find -lgcc_s

Anlaşılan libgcc_s.a isimli bir dosyayı arıyor. (-l'den sonra gelen ismin başına lib, sonuna da .a ekler.) Belki onu kuran Linux pakedini araştırmak gerek.

Öte yandan, ldd'nin gösterdiği kütüphaneler her Linux sisteminde bulunan dosyalar. Yani belki de bir sorun yoktur. :)

Daha fazla öğrenince yazacağım.

Ali

Peki windows icin ne yapmak gerek ustadim? Bir de mesela gtk ve gtkD'yi icermesi gerekiyor degil mi kurulumun?
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Belki de gtkD'nin GNUmakefile'ı yalnızca dinamik olarak bağlamaya göre yapılmıştır. (Bu konuda tamamen yanılıyor olabilirim?) Onu bilemiyorum... Belki de forumlarında sorulacak yeni bir sorudur... ;)

Ama gtkD'yi kullanmayan basit bir deneme.d programını statik bağlamayı çözdüm: dmd ile derlemek ve gcc ile bağlamak...

Önce şu komutla yalnızca derliyoruz ve bir program parçası (object file) oluşturuyoruz:

dmd -c deneme.d -ofdeneme.o

Daha sonra o program parçasını ve gereken kütüphaneleri gcc ile bağlıyoruz (aslında gcc kendi işini yapıp arka planda ld'yi çağırır):

gcc deneme.o -static -o deneme ~/dmd/linux/lib/libphobos2.a -lpthread

Bağımsız programımız kullanıma hazır... :)

Windows konusunda da forumda sormak gerek... :/

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 07:00:55 (UTC -08:00)