Boost kitaplığı, çoğu popüler yazılımlar tarafından da kullanılan; dosya sistemi, lineer cebir, çoklu threading ve benzeri işlemlerin bir arada buluştuğu çok büyük ve önemli bir kitaplıktır. Çoğu önemli yazılım, bu kitaplıktan fazlasıyla yararlanmaktadır. Örneğin: Adobe Illustrator, McAfee AntiVirus vb.
Kitaplık oluşturma nedir?
Kitaplık oluşturma (daha doğrusu "building libraries"), kitaplıkların kullanılabilir hale getirilmesidir. Peki bunu neden yapıyoruz?
Bazı kitaplıklarda yapmamıza gerek yok, Boost gibi. Ama filesystem gibi önemli modüllerde build yapılması gerekiyor. Ama genelde Boost kitaplığı, sadece header dosyalarından oluşur.
(Header dosyası: C++ kaynak dosyasında kullanılan referans, define, pointer ve sınıfların bulunduğu yer).
Boost kitaplığının indirilmesi
Kitaplığın indirilmesi için öncelikle boost.org sitesine gidiyoruz. (Boost.org, Boost kitaplığı geliştiricileridir.)
Kitaplığın "Downloads" kısmından en son versiyonunu seçiyoruz. (Version 1.81.0)
İstediğiniz şekilde indirebilirsiniz, ancak Windows kısmından olduğundan emin olun. Unix yani macOS benzeri işletim sistemi
kullanıyorsanız, Unix kısmından indirebilirsiniz.
Kitaplığı indirdikten sonra bu şekilde görünecektir.
Kitaplığımızı çıkarmak için "Klasöre ayıkla" tuşuna basıyoruz. Eğer WinRAR kullanmıyorsanız, dosyayı dışarı almanız yeterli.
Dosya biraz büyük bu yüzden beklemekte fayda var.
Kitaplık çıkarıldığı zaman bu şekilde görünmeli.
Kitaplığın oluşturulması
Oluşturmaya başlamadan önce sisteminizde cl.exe yani Microsoft Visual C++ derleyicisinin yüklü olduğundan emin olun.
Şimdi sıra kitaplığı oluşturmakta. İki türlü yapabiliriz, statik ve dinamik.
- Statik olarak oluşturduğumuz zaman kitaplık programımızın içine yüklenir.
- Dinamik olarak oluşturduğumuz zaman kitaplık programın dışına derlenir. (Windows'ta *.dll olarak, Linux ve Unix'de *.so olarak)
Komut istemi açıp indirdiğiniz ve çıkarttığınız Boost klasörüne gelin ve
bootstrap.bat
komutunu çalıştırın.Aldığınız sonuç bu olmalı.
Oluşan b2 (*.exe) nedir?
Bu program, Boost'u derlemenizi sağlayan programdır. Boost.Build olarak da geçer.
b2 --help
komutunu girdiğiniz zaman kullanabileceğiniz parametreler karşınıza çıkmaktadır.Bu komut sonucu gördüğünüz bu menüyü aklınızda tutun, dinamik derlemede bu menü yardımcı olacak.
Şimdi
b2
yazarak statik derlemeyi başlatın.Başlattığınız zaman böyle yazılar görmeye başlayacaksınız, şimdi bekleyin.
Bu süreç şu an sisteminize ve sisteminizdeki var olan kitaplıklara göre kendisini konfigüre ediyor.
Bu yazılar da building yani oluşturmanın başladığını belirtir. Bu aşamada hiçbir şeye basmayın.
Oluşturma yapılırken işlemcinizden fazlasıyla güç tüketileceğini de belirtmek isterim.
Bu süreç uzun sürecektir.
Bu süreç sonunda da kitaplığınız, "successfully built" yazısıyla birlikte başarılı bir şekilde hazırlandı.
Buradaki iki mesaj çok önemli.
Çeviri:
Derleyiciye bu dizini aktarın:
"boost dizininiz"
Kitaplık bağlayıcıya bu dizini aktarın:
"boost dizininiz\stage\lib"
Eğer yazılımınızda Boost kitaplığını kullanmak istiyorsanız, IDE'nizin derleyicisine Boost kitaplığının include ve *.lib yani kitaplık dosyalarını tanıtmanız gerekiyor.
Daha fazla bilgi;
Include ve Header dosyaları: #include yönergesi (C/C++) & Üst bilgi dosyaları (C++)
*.lib (kitaplık) dosyaları: İzlenecek yol: Statik kitaplık oluşturma ve kullanma (C++)
Gördüğünüz üzere artık "bin.v2" dosyamız var. Derlenen *.lib dosyalarımız artık burada.
"boost dizini"\bin.v2\libs\filesystem\build\msvc-14.3\release\link-static\threading-multi klasöründeki oluşan dosyalar.
Statik olarak oluşturduğumuz için lib dosyalarımız libboost ile başlıyor.
Dinamik derleme
b2 --help
ile buradaki menüyü hatırlıyoruz. Buradaki link ve variant parameterlerini kullanıyoruz.link=static | shared
- static: Statik olarak derler statik olarak derlemek için bu parametrelere gerek yok.
- shared: Dinamik olarak derleme yapar, ve *.dll dosyaları oluşturur.
- debug: Programı hata ayıklama yaparken kullandığımız kitaplık türüdür. Hem release, hem de debug varyantlarıyla derleme yapmanız önerilir.
- release: Programın tamamlanmış haline bağlanan türdür. Programınızı yayınlarken bu *.dll türü ile yayınlamalısınız.
b2 link=shared variant=debug
kodu ile derlemeyi başlatıyoruz.Aynı şekilde bu süreç de uzun süreceğinden hiçbir şeye basmıyoruz.
Dinamik derleme ile de aynı sonucu alıyoruz.
Şimdi
b2 link=shared variant=release
ile de release varyantı için derlemeyi başlatıyoruz.Bu süreç için de bekliyoruz.
Sonucumuz yine aynı şekilde.
"boost dizini"\boost_1_81_0\bin.v2\libs\filesystem\build\msvc-14.3\release\threading-multi klasöründeki oluşan dosyalar.
Dinamik olarak derlediğimiz zaman da bu dosyalar karşılıyor bizi.
boost_filesystem-vc143-mt-x64-1_81.dll
dosyasını da yayınlayacağınız program ile birlikte aynı klasöre koymanız gerekiyor.(eğer programınız boost filesystem modülünü kullanıyorsa)
Kitaplığın kullanımı
İlk başta kullanımını öğrenmek zor olabilir, bu yüzden küçük bir örnek ile sizin karşınızdayım.
Kitaplığı bağlama
Kitaplığı statik ya da dinamik olarak bağlamak, aynı şekilde yapılabiliyor. Sadece kitaplık türüne dikkat etmek yeterli (*.lib).
Visual Studio 2022 kullanarak bir konsol programı oluşturduktan sonra, menülerden "Proje > Proje Özellikleri" sekmesine giriyoruz.
Özellik Sayfaları sekmesine girdiğimiz zaman bizi yandaki C/C++ ve Bağlayıcı menüleri karşılıyor.
"Ek İçeren Dizinler" menüsüne tıkladığımız zaman bizi bu kutu karşılıyor.
Sarı klasör gibi görünen ikona bastıktan sonra, b2 programının söylediği konumu ekliyoruz ve Tamam diyoruz.
Daha sonra Bağlayıcı ve Genel'e geliyoruz. Buradaki Ek Kitaplık Dizinleri'ne tıklıyoruz.
Dinamik olarak bu şekilde;
Statik olarak da bu şekilde bağlıyoruz;
Örnek program ile deneme
Aşağıdaki bu "boost.org" tarafından sağlanan örnek program sayesinde bağlantımızın doğru olup olmadığını kontrol edebiliriz.
Bu programın amacı, argument ile belirtilen dosyanın boyutunu sorgulamaktır.
C++:
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
Statik bağlantı ile deneme
Görmüş olduğunuz gibi statik bağlantı ile derlediğimiz deneme programımız başarıyla sonuçlandı.
Örnek olarak ClickMonitorDDC'nin boyutuna baktık, ve dir komutu ile de doğruladık.
Önemli not: Derlediğim programın C'de olmasının sebebi, kullanıcı adımın gözükmemesidir.
Sizin projeniz C:\Users\"kullanıcı"\source\repos\BoostProject\x64\Debug dizininde bulunur.
Dinamik bağlantı ile deneme
Dinamik olarak bağlantımızı bu şekilde öncelikle yapıyoruz. (dizinde "link-static" bulunmamalı)
Proje özelliklerine geri döndüğümüz zaman C/C++ > Ön İşlemci ve Ön İşlemci Tanımları'na geliyoruz.
Dinamik olarak bağlantının sağlanması için derleyiciye talimat vermemiz gerekiyor, o talimat da burada belirtildiği gibidir:
BOOST_ALL_DYN_LINK
Eğer bu hatayı alıyorsanız, dinamik bağlantı sağlanmış demektir. Bu hayatı almanızın sebebi, projenizin bulunduğu klasörde belirtilen *.dll dosyasının bulunmamasıdır.
Proje dizininize kullandığınız modülün bulunduğu dizinden, modülün dll dosyasını projenizin bulunduğu dizine kopyalayın.
Sonra programınız çalışacaktır.
Okuduğunuz için teşekkür ederim.