Statik bağlama(Link)... (Çözüldü)

Kylix, Lazarus, Freepascal ile ilgili konuları buraya yazabilirsiniz.
Cevapla
Hakkan
Üye
Mesajlar: 18
Kayıt: 24 Tem 2004 11:08
Konum: ISTANBUL

Statik bağlama(Link)... (Çözüldü)

Mesaj gönderen Hakkan »

Herkese uzun bir aradan sonra tekrar merhaba...

Eski dosta yeniden merhaba diyerek FreePascal'ın şefkatli kollarına rücu etmiş bulunmaktayım(Bu devirde Turbo Pascal olmaz tabii). Lazarus'u da epey bir aradan sonra tekrar kullandım. Bir hayli yol alınmış. Fakat beceremediğim bir konu var: Bir kütüphaneyi(gtk olur, sqlite olur, hiç farketmez) FreePascal programına statik olarak bağlamayı beceremedim. Kütüphaneler C ile yazılmış yalnız. Aslında bağladım ama bu sefer de C runtime eksikliği başgösteriyor hedef yazılımda. FreePascal'ın bir C runtime dosyası mevcut değil. Mingw'den aşırdım bir tane:) libcrtdll.a, ama bu da başka bağımlılık problemleri çıkardı.

Google Amca'da bu konuyla ilgili yegane belgede de şöyle bir çözüm önerisi sunulmuş:

Kod: Tümünü seç

{$Linklib c}
ki bu da işe yaramamakta...

Yapmak istediğim şey kullandığım C kütüphanelerini (sqlite, gtk+ vb.) exe dosyasına statik olarak bağlayabilmek ve kendi kendine yeten(standalone) exe dosyası elde edebilmek...

İlgilenenlere şimdiden çok teşekkürler...
En son Hakkan tarafından 13 Şub 2008 06:44 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Hakkan
Üye
Mesajlar: 18
Kayıt: 24 Tem 2004 11:08
Konum: ISTANBUL

Mesaj gönderen Hakkan »


Kendi yarama kendim merhem olmuş bulunmaktayım, şöyle ki:

Programa bir C kütüphanesi eklediğimizde (Ör: {$Linklib sqlite3} ) artık programımız C çalıştırma kütüphanesine(C Runtime Library) bağımlı oluyor.

Libc tabanlı unix, linux sistemlerde

Kod: Tümünü seç

{$Linklib c}
kodu işimizi görüyor.
Win32'de ise aşağıdaki kodu kullanıyoruz:

Kod: Tümünü seç

{$Linklib sqlite3}

{$Linklib msvcrt}
//{$Linklib stdc++}
//{$Linklib user32}
//{$Linklib shell32}
//{$Linklib advapi32}
{$Linklib kernel32}
//{$Linklib mingw32}
//{$Linklib mingwex}
//{$Linklib moldname}
{$Linklib gcc}

uses sqlite3, sysutils;

Yorum satırları duruma göre etkinleştirilebilir. Program bu şekilde sqlite3 kütüphanesi ile statik olarak bağlandı(dll gerektirmeden) ve sorunsuz olarak çalıştı.

libsqlite3.a dosyasını sqlite3'ün C kodlarını Code::Blocks ile bizzat derleyerek elde ettim. Diğer .a dosyaları mingw dağıtımında mevcuttur. Ben şahsen Code::Blocks içindeki lib dizininden aldım.

Herkese kolay gelsin...

Not: mingw içinden alacağınız dosyalar lib****.a biçimindedir.
Cevapla