Herkese merhabalar arkadaşlar değerli moderasyon ekibi yöneticisi sayın @Suskun 'un geçmişte paylaştığı ancak pek çoğumuzun konu dahi paylaşılmasa haberi olmadığı belki haberi olduğu ancak kaynak yetersizliği yüzünden fazla aşina olamadığı dil olan Crystal dilini bugün MSys2 ile Windows bilgisayarımıza hem UCRT64 hem de Mingw64 üzerinde kurup yürütülebilir uygulamalar derlemeye çalışacağız. Sizlere tavsiyem MSys2 'yi Ortam Değişkenlerine tanıtmayı unutmayın ki birazdan göstereceğim bu sayede komut istemi üzerinden istediğiniz şekilde rahatça derleme yapabilirsiniz. Crystal dili hakkında bilgi almak içinse aşağıya link bırakıyorum oradan okuyabilirsiniz;
Link : turkhackteam.org/konular/crystal-diliyle-tanisin.2081602/
Windows işletim sistemi üzerinde Linux benzeri bir geliştirme ve çalışma ortamı sağlıyor & bash , ls, grep gibi terminal kodlarını kullanmanızı sağlıyor. Zaten @Suskun 'un konusunu okuyacak olursanız eğer henüz Windows ortamında yeni geldiği eksikleri olduğu daha çok Linux işletim sisteminde stabil olarak çalıştığını belirtmiş. Bizim MSys2 'yi de indirmemizin en büyük etkenlerinden birisi Linux ortamına benzer bir terminal yaratmak & burada çalışmak. İleride daha çok araştırma yapacak olursam daha detaylı açıklamayı düşünüyorum MSys2 aracı hakkında bilgileri...
Link : msys2.org
Şimdi ilk önce yapmamız gereken MSys2 ortamımızı güncelleyelim.
Bash:
pacman -Syu
Karşımıza bir sürü Y/n Yani Evet/ Hayır seçeneği gelecek biz hepsine Y yani Evet deyip Enter tuşuna basalım & ortamımızı başarıyla güncelleyelim. Şahsen daha önce güncellediğim için sadece göstermek amaçlı siz de bakın istedim.
[ GÖRSEL GÖSTERİM ]
Şahsen sistemin Windows işletim sistemi üzerinde tam oturmuş olmaması & DLL derleme esnasında mimaride sıkıntı yaratmaması için hem UCRT64 için hem de Mingw64 için kurulum yapacağım yine aynı terminal üzerinde aşağıdaki kodları girip kurulumun bitmesini bekliyorum. Gelen uyarılara da yine aynı şekilde hepsine Y yani Evet deyin.
Bash:
pacman -S mingw-w64-ucrt-x86_64-crystal mingw-w64-ucrt-x86_64-shards
pacman -S mingw-w64-x86_64-crystal mingw-w64-x86_64-shards
MINGW64 ; Eski Windows sürümleriyle uyumluluk sağlar ancak modern standartlara tam uyumlu değildir. Microsoft Visual C++ Runtime kütüphanesini kullanır.
UCRT64 ; Microsoft 'un modern Universal C Runtime (UCRT) kütüphanesini kullanır. Visual Studio 'nun (MSVC) kullandığı kütüphane ile aynıdır dolayısıyla Windows 10 ve 11 sürümleriyle tam uyumludur.
-Kurulumunuz bittiyse size vereceğim komutları bir not defterine kayıt edip daha sonra uzantısını .bat olarak değiştirin bu sayede konu başında bahsetmiş olduğum komut istemi üzerinden çalışma düzenini yapabilirsiniz. Bu komutlar ortam değişkenleri ayarını otomatik olarak yapıyor.
Kod:
@echo off
:: MSYS2 dizinlerini geçici olarak PATH'e ekler
set "PATH=C:\msys64\ucrt64\bin;C:\msys64\usr\bin;%PATH%"
:: Sisteme UCRT64 ortamında olduğumuzu bildirir
set MSYSTEM=UCRT64
echo Crystal Ortami Hazir!
crystal --version
cmd /k
Yukarıdaki işlemi yaptıktan sonra komut isteminiz size şuna benzer bir mesaj vermesi lazım. Eğer bu mesajı gördüyseniz hayırlı olsun.
[ GÖRSEL GÖSTERİM ]
Şimdi herhangi bir klasör üzerinde komut istemi açalım & aşağıdaki komutu girelim.
Kod:
echo puts "Merhaba Crystal!" > merhaba.cr
Ardından şunu girelim & sonuçları gözleyelim.
Kod:
crystal run merhaba.cr
[ GÖRSEL GÖSTERİM ]
Evet Merhaba mesajını başarı ile aldık. Gelelim yürütülebilir dosyamızın ilk safası olan exe üretmeye burada dikkat edeceğimiz nokta gireceğimiz komut. Çünkü şahsen ben bu dosyamın başka Windows ortamlarında çalışmasını istiyorum bu yüzden sıradan exe üretme kodumun yani build komutunun yanına tam olarak şöyle bir komut giriyorum; crystal build --release merhaba.cr bu sayede optimize olmuş bir şekilde derleniyor. Deneyelim bakalım çalışıyor mu?
[ GÖRSEL GÖSTERİM ]
Konumuzun son kısmına geldik DLL üretme işlemi bu kısımda aslında benim sistemden dolayı mı yoksa MSys2 'den midir bir türlü anlamadım biraz uğraştırsa da sonunda çözüme ulaştım. İlk yapmamız gereken kutuphane.cr adlı bir dosya oluşturmak & içerisine aşağıdaki kodları girmek. Bu basit bir toplama işlemi;
Kod:
@[NoInline]
fun topla(a : Int32, b : Int32) : Int32
a + b
end
Ardından .o uzantılı dosyamızın oluşması için aşağıdaki komutu komut istemine girelim;
Bash:
crystal build kutuphane.cr --cross-compile --target x86_64-w64-windows-gnu
Daha sonra oluşan DLL dosyamızın başka Windows sistemlerinde çalışması için aşağıdaki komutu girelim & DLL dosyamız oluştu mu bakalım? Şayet oluştuysa C# ile çağıralım.
Bash:
x86_64-w64-mingw32-gcc -shared kutuphane.obj -o my_lib.dll -static -static-libgcc -static-libstdc++ -lgc -liconv -lpthread -ladvapi32 -lshell32 -lole32 -lws2_32 -lkernel32 -lntdll
[ GÖRSEL GÖSTERİM ]
Basit bir konsol uygulaması oluşturdum & aşağıdaki kodları girdim. Bu kodlar oluşturmuş olduğumuz DLL 'yi çağıracak & istenen işlemi yapıp bize sonucu verecek.
C#:
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport(@"DLL_UZANTINIZ\my_lib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int topla(int a, int b); // DLL içindeki yazan fonksiyonu import ediyoruz. Yani topla kısmını
static void Main()
{
int result = topla(8, 8);
Console.WriteLine("Sonuç: " + result);
}
}
[ GÖRSEL GÖSTERİM ]
Okuduğunuz İçin teşekkür ederim sevgilerimle...
Son düzenleme:

