Derlerken -pthread bayrağının önemi


143

Çeşitli çok iş parçacıklı C ve C ++ projelerinde -pthreadbayrağın hem derleme hem de bağlama aşamasına uygulandığını gördüm, diğerleri ise hiç kullanmıyor ve sadece -lpthreadbağlantı aşamasına geçiyor .

-pthreadBayrağa derlenip bağlantı kurmama tehlikesi var mı -pthread? Yani aslında ne işe yarar? Öncelikle Linux platformlarıyla ilgileniyorum.

Yanıtlar:


107

Deneyin:

gcc -dumpspecs | grep pthread

ve ile başlayan her şeyi arayın %{pthread:.

Bilgisayarımda bu, dosyaların derlenmesine -D_REENTRANTve bağlantı kurulmasına neden oluyor -lpthread. Diğer platformlarda bu farklılık gösterebilir. -pthreadÇoğu taşınabilirlik için kullanın .

Kullanılması _REENTRANT, GNU C üzerinde, bazı libc başlıklar çalışma biçimini değiştirir. Belirli bir örnek olarak, errnoiş parçacığı yerel bir konum döndüren bir işlevi çağırır.


3
Genelde sadece errnove önişleme olmayabilir . Hpl.hp.com/techreports/2004/HPL-2004-209.pdf makalesinin gcc optimizasyonları için ne kadar alakalı olduğundan emin değilim , ancak orada incelemenin derinliğinden etkilendim.
— Pascal Cuoq

2
Errno örneğinin doğru olduğunu düşünmüyorum. -Pthread bayrağı veya _REENTRANT tanımlaması olmasa bile, errno.h (glibc 2.10.1) ve gcc (amd64 üzerinde 4.4.1), errno işleme için dinamik bir çağrı oluşturur ve sembol adresine bağlanmaz.
— Andy Ross

1
@Pascal: Bağlantı için teşekkürler. Şu anda kafamın biraz üstüne çıkıyor, ancak ana nokta, diş açmanın sadece "tacklenemeyeceği", bunun yerine bellek modelinin bir parçası olarak tasarlanması gerektiği gibi görünüyor. Buna tamamen katılıyorum.
— Chris Jester-Young

2
@Andy - gcc sürümünüz sağlamak -D_REENTRANTveya -pthreadotomatik olarak oluşturulabilir. Derlemenizi çalıştırdığınızda g++ -v, derleyicinin ön ucunun gerçekte hangi parametrelere geçtiği hakkında çok fazla çıkış yapar cc1plusve ld.
— Tom

3
Burada hala cevaplanmayan bir soru var: -pthread bayrağını derlememek ve bağlantı kurmakla ilgili bir tehlike var mı?
— natenho

40

Gönderen man gcc:

-pthread pthreads kütüphanesi ile çoklu kullanım desteği ekler. Bu seçenek, hem önişlemci hem de bağlayıcı için bayrakları ayarlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.