On Tuesday, 2 August 2022 at 22:06:52 UTC, Cos00kun wrote:
> Dediklerinizi dikkate alarak Derelict yerine ondan vazgeçip BindBC ile denemeler yapmak istedim.
1- https://github.com/BindBC/bindbc-sdl adresinden ziplı dosyayı indirdim ve klasöre açtım
2- windows cmd ile bu klasöre girerek "dub.sdl" dosyasını çalıştırdım(hiç bir değişiklik yapmadan). dub bana lib klasörü oluşturdu sadece orada bulunan "BindBC_SDL.lib" dosyasını kaynak dosyamın bulunduğu klasöre kopyaladım.
3- https://libsdl.org/download-2.0.php adresinden SDL2-2.0.22-win32-x86.zip Runtime Binaries: indirdim ve içindeki "SDL2.dll" dosyasınıda kaynak dosyamın bulunduğu klasöre attım.
4- https://github.com/BindBC/bindbc-opengl buradan da opengl yi dub ile halledip oluşan BindBC_OpenGL.lib dosyasını kaynak dosyamın yanına attım
Öncelikle hem eski kafalıyım ama hem de lib dll vs. nasıl çalışıyor bilmiyorum deme hakkın yok kimse kusura bakmasın. "Ben eski kafalıyım vim seviyorum ama hiç bir klavye tuşunu da bilmiyorum" demek ne kadar saçmaysa senin dediğin de en az o kadar mantıksız.
.lib
dosyaları kodunu derlerken bağlayıcıya (yada direk derleyiciye) argüman olarak verdiğin "statik" kod kütüphaneleri oluyor. Bu dosyalar "dinamik" bir şekilde LoadLibrary ve GetProcAddress kullanılarak yüklenemez. Bu statik kütüphane dosyalarını .exe
'nin yanına koymak da hiçbir işe yaramaz ne yazık ki.
.dll
dosyaları ise "Dynamic Link Library" açılımından da anlaşılacağı gibi LoadLibrary
gibi yöntemlerle çalışma zamanında yüklenebilir vaziyetteki kütüphane dosyalarıdır. Dinamik kütüphaneleri Windows'ta kullanmanın 2 yolu var:
-
extern
fonksiyonlar tanımlayıp bu .dll
dosyasını senin için otomatik yükleyen bir .lib
dosyası (nam-ı diğer: "import library") kullanmak.
-
.dll
'yi LoadLibrary
ile açıp GetProcAddress
ile kodunda tanımladığın fonksiyon göstericilerinin (function pointer) içini doldurmak. Ardından fonksiyon göstericilerini tıpkı bir fonksiyon gibi kullanmak.
BindBC iki yöntemi de destekliyor ama varsayılan olarak dinamik ayarda çalışıyor. Dinamik yükleme genel olarak tercih sebebi çünkü hata durumunda ne yapılacağını kendin kodlayarak belirlemeni ve gerekirse kütüphanenin eski sürümleriyle uyumlu bir şekilde çalışmaya devam edebilmeni mümkün kılıyor. Ayırca indirdiğin kütüphanenin yanında import library hazır gelimiyorsa kendin oluşturman gerekebilir.
Ben yine amele gibi elle paket indirip derlemek yerine dub kullanmanı öneriyorum, ama yine senin bileceğin iş. BindBC paketleri ortak bir bindbc-loader paketine ihtiyaç duyuyor o yüzden onu da derlerken eklemen gerekiyor. (Tabi dub bağımlılık ağacını otomatik çözümlüyor.)
dmd -i -version=SDL_201 -version=GL_AllowDeprecated -version=SDL_Image yeni_2.d -I"bindbc-sdl-1.2.1\source" -I"bindbc-opengl-1.0.2\source" -I"bindbc-loader-1.0.1\source"
-version=SDL_201
SDL_WINDOW_ALLOW_HIGHDPI
kullandığın için
-version=GL_AllowDeprecated
glBegin
gibi eski fonksiyonlar için
-version=SDL_Image
bindbc-sdl
'nin image
modülünü aktif etmek için
-I
argümanları kaynak kod import ettiğin klasörler için
Error: unable to read module 'sdl'
hatalarının sebebi -I
eksik olması
-i
ise -I
ile import edilen koddan dolayı oluşan bağlayıcı hatalarının önüne geçmek için