Metin2 client source derleme ilk bakışta korkutucu görünse de, doğru sırayla ilerlediğinizde tahmin edebileceğinizden çok daha öngörülebilir bir süreçtir. Metin2 istemci kaynağı eski bir C++ kod tabanıdır; bol miktarda harici library'ye bağımlıdır ve çoğu hata aslında derleme mantığından değil, yanlış yapılandırılmış yollardan, uyumsuz bir derleyici sürümünden veya eksik bir .lib dosyasından kaynaklanır. Bu rehberde Visual Studio ile istemci projesini (genellikle UserInterface projesi) baştan sona derlemek için izlemeniz gereken adımları, dikkat etmeniz gereken ayarları ve karşılaşacağınız tipik hataların çözümlerini anlatıyorum.
Başlamadan önce: ne lazım?
Sağlıklı bir Metin2 client source derleme ortamı için birkaç temel bileşeni önceden hazırlamanız gerekir. Elinizdeki kaynak paketin hangi derleyici sürümü için yazıldığını bilmek, ileride yaşayacağınız sorunların yarısını baştan eler.
- Visual Studio — Kaynağın hedeflediği sürüme dikkat edin. Eski client kaynakları çoğunlukla Visual Studio 2008/2010 için yazılmıştır; daha yeni Visual Studio (2017/2019/2022) ile de derlenebilir, ancak bunun için platform toolset ve SDK ayarlarını uyarlamanız gerekir.
- Harici library'ler — İstemci tipik olarak Python (gömülü yorumlayıcı), DevIL (görüntü yükleme), Granny (animasyon/skinning), ayrıca sıkıştırma ve şifreleme için yardımcı kütüphanelere bağımlıdır. Bunların sürümleri kaynak paketinizle tam uyumlu olmalıdır; yanlış sürüm bir Python kütüphanesi bağlantı (link) aşamasında saatlerinizi yiyebilir.
- Derlenmiş bağımlılıklar — Çoğu kaynak paketi, kullandığı library'leri ya hazır
.libolarak ya da ayrı çözümler (solution) hâlinde içerir. Önce bu alt kütüphaneleri, ardından istemci projesini derlemek en güvenli yoldur.
Çözümü açmak ve proje yapısını anlamak
Kaynak paketi açtığınızda genellikle bir .sln (solution) dosyası ve içinde birden çok proje bulursunuz. İstemci tarafında ilgilendiğiniz ana proje çoğunlukla son çalıştırılabilir dosyayı (örneğin oyun istemcisi) üreten projedir; bunun yanında EterLib, GameLib, ScriptLib gibi statik kütüphane projeleri yer alır.
- Solution'ı Visual Studio'da açtığınızda, eski format bir çözümse tek seferlik dönüştürme (upgrade) önerisi gelir. Dönüştürmeden önce kaynağın bir yedeğini almanız şiddetle önerilir.
- Projeler arasındaki bağımlılık sırasını (Build → Project Dependencies / Build Order) kontrol edin. Statik kütüphaneler ana projeden önce derlenmelidir.
- Aktif yapılandırmayı (Configuration) ve platformu doğru seçin. İstemci klasik olarak Win32 (x86) hedefiyle derlenir; x64 değil. Python ve diğer library'lerin de 32-bit sürümlerini kullanmanız gerekir.
Platform toolset, SDK ve C++ standardı
Modern bir Visual Studio ile eski bir kaynağı derlerken en kritik ayarlar burada toplanır. Proje özelliklerinde (Properties) şunlara bakın:
- Platform Toolset — Visual Studio 2019/2022 kullanıyorsanız toolset'i
v142/v143olarak seçebilirsiniz; ancak eski koddaki uyumsuzlukları azaltmak isterseniz uygun bir eski toolset'i (örn.v141) Build Tools ile yükleyip seçmek daha az sürpriz çıkarır. - Windows SDK Version — Kurulu olan bir SDK sürümünü seçin. "Cannot find Windows SDK" türü hatalar genellikle projenin artık var olmayan bir SDK'yı işaret etmesinden kaynaklanır.
- Character Set — Eski Metin2 kaynakları çoğunlukla Multi-Byte Character Set ile çalışır. Unicode'a zorlamak, string fonksiyonlarında derleme hataları doğurabilir.
- Runtime Library — Tüm projelerin (alt kütüphaneler ve ana proje) aynı runtime'ı kullandığından emin olun: Release için
/MTya da/MDtutarlı olmalı. Karışık runtime,LNK2005"already defined" hatalarının başlıca sebebidir.
Include ve library yollarını ayarlamak
Derleyicinin başlık (header) dosyalarını ve linker'ın .lib dosyalarını bulabilmesi için yolları doğru tanımlamalısınız. Bunu proje bazında ayarlamak, makine geneline yaymaktan daha temizdir.
- C/C++ → General → Additional Include Directories — Python, DevIL, Granny ve diğer library'lerin
includeklasörlerini buraya ekleyin. - Linker → General → Additional Library Directories — Aynı library'lerin
.libdosyalarının bulunduğu klasörleri ekleyin. - Linker → Input → Additional Dependencies — Gerekli
.libadlarını burada listeleyin. Eksik bir giriş doğrudanLNK2019(unresolved external symbol) hatasına yol açar. - Yolları mümkünse göreli (relative) veya makro (örn.
$(SolutionDir)) ile yazın; böylece kaynağı başka bir klasöre taşıdığınızda her şeyi elle düzeltmek zorunda kalmazsınız.
Sık görülen derleme hataları ve çözümleri
İstemci derlerken en çok zaman kaybettiren hataların büyük kısmı linker aşamasındadır. İşte tipik örnekler ve bakmanız gereken yer:
error LNK2019: unresolved external symbol ...
error LNK1104: cannot open file 'python27.lib'
error LNK2005: ... already defined in ...
- LNK1104 (cannot open file) — Linker bir
.lib'i bulamıyor. Library Directories yolunu ve dosyanın gerçekten o sürümde (ör. doğru Python sürümü, doğru 32/64-bit) orada olup olmadığını kontrol edin. - LNK2019 (unresolved external symbol) — Çoğunlukla Additional Dependencies listesinde eksik bir kütüphane vardır ya da statik kütüphanelerden biri derlenmemiştir. Önce alt kütüphaneleri derleyin.
- LNK2005 (already defined) — Genellikle tutarsız Runtime Library ayarı veya aynı sembolün iki yerde tanımlanmasından kaynaklanır. Tüm projelerde runtime'ı eşitleyin.
- Derleyici (C-prefixli) hataları —
C2065,C2664gibi hatalar genellikle yanlış toolset/SDK veya Unicode/MBCS uyumsuzluğunun işaretidir; önce karakter setini ve include yollarını gözden geçirin.
Genel kural: hataları her zaman yukarıdan aşağıya okuyun. İlk hatanın altındaki onlarca satır çoğu zaman aynı kök sebebin türevidir; ilk satırı çözünce gerisi de düşer.
Sık Sorulan Sorular
Hangi Visual Studio sürümünü kullanmalıyım?
En güvenli yol, kaynağın yazıldığı sürüme yakın bir toolset kullanmaktır. Modern Visual Studio 2019/2022 ile de derlenebilir, ancak platform toolset, SDK ve karakter seti ayarlarını uyarlamanız gerekir. Sorun yaşarsanız uygun eski Build Tools'u kurmak çoğu uyumsuzluğu giderir.
Mutlaka x86 (Win32) mı derlemeliyim?
Klasik Metin2 istemci kaynakları 32-bit hedefe göre tasarlanmıştır ve bağımlı library'lerin (Python dâhil) 32-bit sürümlerini bekler. x64'e taşıma ileri düzey bir iştir; başlangıç için Win32 ile ilerlemeniz çok daha sorunsuz olur.
Library'leri nereden ve hangi sürümde almalıyım?
En sağlıklısı, kaynak paketinizle birlikte gelen sürümleri kullanmaktır. Python, DevIL, Granny gibi kütüphanelerde sürüm uyumu kritik; rastgele güncel sürümler ABI uyumsuzluğu ve link hataları doğurabilir.
Takıldığınız bir LNK hatası mı var? Metin2 istemci ve sunucu derleme, kaynak düzenleme ve C++ tarafındaki sorunlarda yardıma ihtiyacınız olursa benimle iletişime geçin — birlikte çözelim.