Visual Studio'nun header ve library dosyalarını arama sırası
Canım sıkıldı bişiler yaziyim. Visual Studio’da göreli geniş bir proje yapıyorsanız ve başka başka kütüphanelerden faydalanıyorsanız bunları bir şekilde projeye include etmeniz gerekiyor. Bunları yapmanın birkaç yolu var.
Öncelikle şundan bahsedeyim newbieler için bir projede external bir fonksiyonu kullanmak için varsa o fonksiyonu içeren header dosyasını(.h uzantılı) include etmek gerekiyor. Misal #include<stdio.h> böyle bişidir. Bu durumda iş biraz daha kolaydır. Hızlı olur. Diğer durumda fonksiyon library file içinde olabilir ki bunlar da .lib ile biten paketlenmiş kütüphanelerdir. Bunları projeye dahil etmek için şöyle bir yol izlenebilir (Visual Studio 2008 ve SP1 için):
-
Projeye sağ tıklanıp “Properties” e gelinir.
-
Linker -> Input kısmına gelinir. Ordan “Additional Dependencies”e gelinir ve karşısına aralara ‘;’ (noktalı virgül-tırnaklar olmadan-) koyarak istenen lib dosyalarının isimleri yazılır. Path değil dikkatinizi çekerim ismleri sadece.
Mesela şöyle bir görüntü oluşabilir:
Projeyi build ettiğinizde muhtemelen bıdıbıdı.lib dosyasını bulamadım abi der. Şöyle bir hata olur genelde yamulmuyorsam:
Unresolved external symbol
Neden çünkü bizim kullanmak istediğimiz lib dosyasının pathini alete vermedik. Olay da burada başlıyor işte.
Header ve lib dosyalarının pathlerini vermenin bir şekli şöyle:
1) Header:Projeye sağ tık Properties, C/C++ -> General -> Additional Include Directories. Buraya kod içinde #include<bilmemne.h> diye include ettiğimiz header dosyasının içerildiği pathi giriyoruz. Böylece external bir kütüphaneyi dilediğimiz gibi kullanabiliyoruz.
Library file: Bunun için de Projeye sağ tık Properties, Linker -> General -> Additional Library Directories'in karşısına yukarıdaki gibi kullanmak istediğimiz lib uzantılı dosyanın içerildiği pathi yazıyoruz. OK diyip çıkıyoruz. Rebuild solution tada hata kaybolacak. Başka bişi yoksa çalışacak muhtemelen.
Bu ilk çözüm takdir edersiniz ki projeye özel bir çözüm. Daha genel geçer bir çözüm aşağıda:
2) External header ve lib dosyalarını sık sık değişik projelerde kullanılacaksa bu yöntem daha uygun sanki. Visual Studio ana penceresinde Tools -> Options -> Projects and solutions -> VC++ Directories'e gelinir. Sağ kısımın sağ üst köşesinde Show directories for yazar onun altındaki dropdown listten "Include files" veya "Library files"a gelerek istenen header veya lib dosyalarının içerildiği pathler yazılır. Böylece hiç projenin ayarlarını değiştirmeden buradan dahil edilebilir.
3) Bu biraz amelece olacak ama küçük ve az dosyalı bi kütüphaneyle çalışılıyorsa yapılabilir: headerları falan doğrudan projenin source klasörü içine atmak
Dosyaları arama sırası
1. Build aşamasında ilk olarak ilgili source klasörüne bakılır
2. Proje Properties'indeki Additional Include Directories'de bakılır
3. Tools-> Options'tan ayarlanan VC++ Directories'e bakılır
Pros&Cons
Bi kere 1. yöntemle hazırlanmış projeleri paylaşması paylaşılan insan için daha kolaydır. Çünkü bi de projenin ayarlarını yapmakla uğraşmaz doğrudan build edebilir tabi aynı pathlerde aynı kütüphaneler varsa.(ortam değişkenleri de aslında bunun için var bence). Taşınabilirlik artar. 2. yöntemde taşınabilirlik yok adam projeyi alınca bi de ayarlarını yapar include edilen liblerin yollarını bulup belirtir. Ama 2. yöntemde de sürekli yeni proje açtıkça aynı ayarlar yapılmayıp rahat edilir. 3. yöntemde de projenin boyutu falan büyüyor.
Benim yorumlamam bu kadar.
- Hakan Uysal