Howto etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Howto etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Linux'te C için statik kütüphane oluşturma ve kullanma


Kütüphane genel olarak bir proje grubunun dış dünyada (diğer yazılım proje gruplarının vb.) kullanılması amacıyla oluşturdukları dosyalar için kullanılan kavramdır. Bu kütüphaneler içeriğinde hangi fonksiyonları kullanabileceğimizi belirten yani dış dünyaya sundukları interface' leri bildiren bir header dosyası ve bu interface' lerin nasıl kullanılacağını anlatan bir dokümantasyon ile beraber verilir. Statik ve dinamik olarak iki farklı kütüphane biçimi bulunmaktadır. Statik kütüphane kullanmanın avantajı programınızı tek bir çalıştırılabilir dosya şeklinde dağıtmanızı sağlamasıdır.Kütüphanenin tamamı çalıştırılabilir dosyanın içine gömülmektedir.(stand-alone executable) Diğer taraftan kütüphanenin tamamının programa eklenmesi hafıza israfına yol açmaktadır. Ayrıca statik kütüphanelerin güncellenmesi de pek kolay değildir. Bunun için hem kütüphanenin hem de bunu kullanan programın tekrardan derlenmesi gerekmektedir.

1.Adım:

ar rc <libname.a> <obj1.o> <obj2.o> ...


ar arşiv oluşturma - düzenleme için kullanılan bir komuttur.

2. Adım:

ranlib <libname.a> ile oluşturduğumuz kütüphanenin indekslememizi sağlar. Peki bu ne işe yarar?

kütüphane içinde index oluşturarak erişim hızını arttırma amaçlı kullanılmaktadır.




3. Adım: Kullanma


  •  1. derleme işleminde libmath.h dosyasını bulamadığını söylüyor ki bu konuda haklı standart include dosyalarına baktığı yerlerde bulunmamaktadır. Bu nedenle bakması gereken yeri -I parametresi ile söylememiz gerekmektedir.
  • 2. ve 3. derleme I ile verdik fakat -L ile kütüphaneleri link ederken standart baktığı yerler dışında -L ile verdiğimiz yol ifadesinde belirtilen yere de bakmasını söyledik fakat derlemede gene link hatasıyla karşılaştık. Çünkü kullandığımız kütüphaneyi link etmesi gerektiğini söylemedik. Bunun için -l parametresi ile libmath kütüphanesini de link ederken kullanmasını söylememiz gerekmektedir. -l' ile parametre verirken libmath başındaki lib kelimesini yazmadığımız dikkatinizden kaçmasın. 
  • 4. derlemede sonunda başarılı bir şekilde derleme ve çalıştırma gerçekleştirilmiştir.








Linux'te cURL Kütüphanesinin Kullanılması

12:03 , ,

apt-get install libcurl4-gnutls-dev ile ilgili kütüphanelerin kurulumu yapilir.


Yukarıdaki gibi örnek bir http get isteği için kod yazılır. Derleme işlemi sirasinda linker'a -l parametresi ile curl kütüphanesi ilave edilir. eğer linker libcurl'ü bulamıyorsa bu durumda -L ile curl kütüphanesinin bulunduğu yeri vermemiz gerekebilir.


Derleme işleminin ardindan kod çalıştırılırsa başarılı bir şekilde indirme işmenin gerçekleştirildiği görülür.

C'de multi solution projelerde visual studio ayarları

11:38 ,

C veya C++ projelerinde birden fazla projeyi aynı anda yönetmek bir projenin çiktisini .lib yapmak ve diğer projenin bu .lib'i kullanması gibi senaryolar yazilim proje dünyasında sık karşılaşılan durumlarıdır. Visual Studio yardımıyla biz de temel düzeyde bir örnek oluşturalım. Bir tane .lib üreten proje bir tane de bu .lib 'i kullanan projemiz olsun.



yapmamız gereken iki ayar mevcuttur. ilk olarak oluşturduğumuz kullanan tarafta add new reference kısmına .lib üreten projemizi eklemek


ardından .h dosyasini kullanan tarafa eklemek yeterli olacaktır.



 ardından funcpool.c 'de Karesi fonksiyonunda yaptiğimiz bir değişiklik ardından projerler derlendiğinde otomatik olarak güncel versiyon üzerinden çalıştığı görülecektir.


cURL kütüphanesinin C'de Kullanımı

10:46 ,


Derlediğimiz lib dosyasını projemize dahil etmek için yapmamız gereken bazı ayarlamalar vardır. ilk önce yapılması gereken preprocessor definition kısmına BUILDING_LIBCURL tanımlamasının girilmesi gerekmektedir.





Ardından Additional Dependencies kısmına ise libcurl.lib,ws2_32.lib,wldap32.lib kütüphanelerinin girilmesi gerekmektedir.




.lib dosyamızın yeri de projemize gösterilmesi gerekir.







Preprocessor'ün ihtiyacı olan başlık dosyalarının yerinin de gösterilmesinin ardından cURL artık kullanılmaya hazır hale gelmiştir.




Eğer bu noktada linker hatası aldıysanız problemin 32 Bit - 64 Bit farkı olma olasılığı yüksektir.





Çünkü biz kütüphanemizi 32 Bitte derlemiş olabiliriz.(öyle yaptık)


Bu noktada yapılması gereken şey libcurl projesini 64 Bitte derlemek olacaktır. Ardından .lib dosyasını eskisiyle değiştirilmesinin ardından projemiz başarıyla çalışacaktır.









Bu noktada projemizi 32 Bit'e çeksek bu sefer yine linker hatası verecektir. Çünkü libcurl'ü 64 Bitte derledik.











cURL kütüphanesinin C Projesine dahil edilmesi

10:50 ,




cURL kütüphanesi C ile http gibi web isteklerini gerçekleştirmek için kullanılan bir kütüphanedir. Öncelikle yapılamsı gereken web sitesinden ( http://curl.haxx.se/ ) ilgili dosya indirilir.




ve dosya içeriğindeki vs-> vc8 -> lib içindeki visual studio proje kısayolu ile libcurl projesi açılır. 


Projenin çıktısı .lib dosyası olacaktır. Derleme işleminin ardından .lib dosyamızın oluştuğu görülecektir. 



Projeyi derlemeden önce aditional include library kısmına projenin ihtiyacı olan dosyaların yerlerinin düzgün verildiğine dikkat ediniz. 



Ardından projeyi build ettiğinizde projenin derlendiğini göreceksiniz. Burda dikkat edilmesi gereken parametreler 32 Bit - 64 Bit ve Debug -Release Mod seçenekleri olacaktır.

C'de gets fonksiyonunun implementasyonu

10:44

Standart gets fonksiyonu EOF veya new line("\n") karakteri görene kadar stdin dosyasından okuma yapar ve bu okunan iki karakterden gelen herhangi birinin yerine "\0" karakteri  ile yer değiştirir. gets fonksiyonu parametre olarak aldığı char * adresinden başlayarak içini doldurur ve başlangıç adresini geri dönüş değeri olarak verir. gets fonksiyonunu getchar kullanılarak yazmak mümkündür.Biz bu implementasyonu yaparak gets fonksiyonunu daha iyi anlamış oluruz. ( getchar fonksiyonu stdin'inden tek bir karakter okuma işlemi yapar. )


Yukarıdaki mygetsv1 versiyonunda while döngüsü ile tek tek karakter okuması yapar ve gelen karakter new line veya EOF karakteri ise döngüden çıkmaktadır.  "\n" ve EOF karakterlerine okuma yapar yani stdin' den alır ama bunları diziye koymaz onun yerine "\0" yani null karakter yerleştirmektedir.

Eğer diziye hiç atama yapılmamış ve gelen karakter EOF ise NULL geri dönüş yapmaktadır aksi halde üzerinde işlem yapılan dizinin başlangıç adresini geri döndürür.



mygetsv2'de ise aynı algoritma for döngüsüyle implemente edilmiştir.



main fonksiyonu ise mygets fonksiyonlarının geri dönüş değeri NULL olana kadar okuma yapar ve ekrana bastırır. Fonksiyonun çalıştırırsak aşağıdaki gibi düzgün çalıştığı görülebilir.



Sistemdeki Sürücüleri Listeleme

05:45

Windows işletim sisteminde C programlama dili kullanılarak nasıl sisteme takılı olan sürücüleri elde edebiliriz? Bu sorunun çözümü windowsta bulunan GetLogicalDriveStrings fonksiyonunu kullanmaktır. Bu fonksiyonun nasıl kullanılacağı aşağıdaki gibidir:



Windows'ta Winpcap (Packet Capture Library) Kullanımı

11:19 , ,

Winpcap kütüphanesi windows ve Linux/Unix platformlar için yazılmış bir "packet capture library" sidir. Ünlü wireshark programı bu kütüphanenin üzerine bina edilmiştir. Bu kütüphaneyi windows'ta kullanarak uygulamalar geliştirmek için önce yapılması gerekenler sırasıyla aşağıdaki gibidir:


  • ilk önce http://www.winpcap.org/devel.htm adresinden developer paketinin indirilmesi gerekmektedir. 


  • Ardından Visual Studio'da include library klasörünü ve linker için lib klasörlerinin yerinin gösterilmesi ve preprocessor'e bununla ayar girilmesi gerekmektedir.


Additional Include Directories:  (Başlık Dosyalarının eklenmesi)


Additional Library Directories: (Kütüphanelerin eklenmesi)



Additional Dependencies: (Ön işlemci kütüphanesinin eklenmesi)


Preprocessor Definitions