C++ Thread Sınıfı Kullanan Kodların Eclipse’de Derlenmesi

C++11 yada C++0x standartlarıyla gelen thread sınıfının kullanıldığı kodların derlenmesi için normalden farklı bir kaç işlem yapılması gereklidir. 

C++11, C++ dilinin 2011 yılında çıkarılan en son versiyonudur. Bu versiyon ile birlikte başta multi-threading olmak üzere bir çok yeni özellik geldi. Bunlardan bazıları cstdint,chrono,mutex ve thread sınıflarıdır. Bütün yeniliklere bakmak isterseniz bu linkte yer alan sayfanın sol tarafındaki referans bölümüne bakabilirsiniz.
Ancak bu yeniliklere uygun kod yazmak kodun çalışabilmesi için yeterli değildir, ayrıca derleyici(compiler) ve bağdaştırıcı(linker) seçeneklerinde de bazı değişikler yapmanız gerekmektedir. Ben bu değişikliklerin uygulanmasını Eclipse üzerinde anlatacağım. Eğer başka bir geliştirme ortamında ya da komut satırından kodunuzu derliyorsanız da bu yolları izleyebilirsiniz.

1. İlk önce Eclipse’de yazdığınız projeye sağ tıklayıp Properties seçeneğini seçin. Daha sonra sol taraftaki menüden, C/C++ General ve ardından Paths and Symbols alt menüsü seçtikten sonra sağ tarafta açılan pencerede Symbols sekmesine geçin. Language kısmından GNU C++‘ı seçtikten sonra Add butonuna tıklayın. Açılan pencerede name kısmına __GXX_EXPERIMENTAL_CXX0X__ yazıp value değerini boş bırakın.

Properties -> C/C++ General -> Paths And Symbols -> Symbols -> GNU C++

Properties -> C/C++ General -> Paths And Symbols -> Symbols -> GNU C++

2. Yine Eclipse’de yazdığınız projeye sağ tıklayıp Properties seçeneğini seçin. Daha sonra sol taraftaki menüden, C/C++ Build ve ardından Settings alt menüsü seçtikten sonra sağ tarafta açılan pencerede GCC C++ Compiler‘ın altında yer alan Miscellaneous sekmesine geçin. Other flags kısmının sonuna -std=c++0x -pthread seçeneklerini ekleyin.

-std=c++0x seçeneğinde c++11 de kullanılabilir.
Properties -> C/C++ Build -> Settings -> GNU C++ Compiler -> Miscellaneous

Properties -> C/C++ Build -> Settings -> GNU C++ Compiler -> Miscellaneous

3. Son olarak da eğer ekrandan çıkmışsanız Eclipse’de yazdığınız projeye sağ tıklayıp Properties seçeneğini seçin. Daha sonra sol taraftaki menüden, C/C++ Build ve ardından Settings alt menüsü seçtikten sonra sağ tarafta açılan pencerede GCC C++ Linker‘ın altında yer alan Libraries sekmesine geçin. Add butonuna tıkladıktan sonra açılan pencerede pthread seçeneğini ekleyin.

Properties -> C/C++ Build -> Settings -> GNU C++ Linker -> Libraries

Properties -> C/C++ Build -> Settings -> GNU C++ Linker -> Libraries

Derle tuşuna bastığınızda konsol çıktısının aşağıdakine benzer bir şey olması gerekiyor.

Derleme Sonucu Ekran Çıktısı

Derleme Sonucu Ekran Çıktısı

 

Evet normal koşullarda şu an kodunuzu derliyor olabilmeniz gerek ama mutlaka arada aksaklıklar çıkacaktır. Benim önerim Eclipse’in paralel programlama odaklı versiyonu olan  Kepler  ‘i kullanmanız. Benim ilk kullandığım Eclipse Juno versiyonuydu ve gerçekten çok sıkıntı çektim. Bir projede thread sınıfını kullanabilirken, aynı ayarlara sahip diğer projemde kullanamıyordum. Yüksek ihtimalle sıkıntı parser’dan kaynaklanıyordu ama ben işimi sağlama almak istedim. Size de önerim budur.

 

UBUNTU 13.10 (Saucy Salamander) KULLANICILARINA UYARI

Ubuntu’nun bu sürümünü kullananlar kodlarını g++ ile derlemeye çalıştıklarında aşağıdaki gibi bir hata alabilirler.

terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted.

Bu hata Ubuntu g++ versiyonundan kaynaklı bir bug’dır. Bu bug’ı bu linkten görebilirsiniz. Ben de Ubuntu 13.10 kullandığım için aynı sorunu yaşadım. Bu sayfada anlatılan -Wl,–no-as–needed ile yapılan çözüm bende bir işe yaramadı. Ancak benim bilgisayarımda daha önceden(Ubuntu 12.10 versiyonu ile) bir sorun çıkarmadığı için g++ versiyonunu değiştirmeyi düşündüm. g++’nın 4.4 versiyonu işe yaradı.

sudo apt-get install -f g++-4.4 gcc-4.4

komutuyla gcc ve g++’nın 4.4 versiyonlarını kurdum ve yukarıdaki resimlerde yer alan Settings sekmesindeki GNU ile başlayan alt seçeneklerdeki command satırlarına;

  • C++ Compiler’da, g++ yerine, g++-4.4
  • C Compiler’da, gcc yerine, gcc-4.4
  • C++ Linker’da, g++ yerine, g++-4.4

yazdım ve derledim. Sorun çözüldü. İkinci bir seçenek olarak

sudo apt-get install -f clang

komutu ile clang derleyicisini bilgisayarınıza indirdikten sonra Settings sekmesindeki GNU ile başlayan alt seçeneklerdeki command satırlarına;

  • C++ Compiler’da, g++ yerine, clang++
  • C Compiler’da, gcc yerine, clang
  • C++ Linker’da, g++ yerine, clang++

yazdım ve derledim. Bu şekilde de sorun çözüldü.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir