2011-02-23 25 views
14

Projemde Boost'tan ASIO kütüphanesini kullanmak istiyorum. Belgesi, regex kullanılmadığında ve SSL kullanılmadığında yalnızca başlık olabileceğini söylüyor. Ancak asio için bcp yüzden derleme ihtiyacı kaynaklarla Bunlardan bazıları çok sayıda libraies, çeker çalışan bjam vbBoost.Asio Sadece başlık olarak

ben bir şekilde libs/kaynağı olmadan, sadece başlık olarak projede ASIO kullanabilir miyim? Sadece ASIO'ya ihtiyacım var, Boost'un başka bir parçası değil.

DÜZENLEME: ASIO, bağlantı kurmak için bir lib'e sahip olan Boost.System ister - bu bağımlılık, yalnızca ASIO'yu kullanabilir miyim?

+1

Boost.Asio, Boost.System'a bağlantı gerektiriyor. Desteklemeyen Asio yapmaz, bkz. [Ralf'in cevabı] (http://stackoverflow.com/questions/5089245/boost-asio-as-header-only/5089464#5089464). –

cevap

12

siz "http://think-async.com/Asio/AsioAndBoostAsio

gelen asio olmayan boost sürümünü alabilirsiniz AFAIK - Boost.Asio hata kodları için destek (boost :: sistemi :: ERROR_CODE sağlamak ve artırmak için Boost.System kitaplığını kullanır :: Asio bunları kendi ad alanı (asio :: error_code ve asio :: system_error) altında içerir.Bu sınıfların Boost.System sürümü, şu anda kullanıcı tanımlı hata kodları için daha iyi genişletilebilirliği desteklemektedir

- Asio sadece başlık dosyasıdır ve çoğu kullanım için herhangi bir Yükseltme kitaplığına karşı bağlantı gerektirmez Boost.Asio her zaman Boost.System kitaplığına ve ayrıca Boost'a karşı bağlanmanızı gerektirir. o boost :: thread kullanarak başlatma konuları. "

+0

olan Boost.System'i de gerektirmiyor. Boost ASIO hakkında duydum ama bazı yerlerde hala yazılıma gerek yok – zaharpopov

+0

@zaharpopov'u inşa et: Kayıtlara göre, boostsuz asio, Boost :: regex' parametresini alan 'read_until()' veya 'async_read_until()' aşırı yüklerini kullanmadığınız sürece Boost gerektirir. – Hasturkun

2

Bcp, regex kitaplığını kullanabileceğinden (ve Windows makinelerinde varsayılan olarak kullanılır) bence. Regex kütüphanesi kaynak dosyalarını sorundan silebileceğinizi umuyorum. Eğer pencerelerin (-DBOOST_DATE_TIME_NO_LIB ve -DBOOST_REGEX_NO_LIB)

ayrıntılar (o sesler tarafından zaten bulduk) this sayfasından vardır üzerinde derleyici eğer doğru derleyici bayrakları eklemek emin olun.

bcp'nin ne kadar akıllı olduğundan emin değilim - mscv yolunu takip etmesini engelleyen yukarıdaki tanımları aktarabileceğinizi sanmıyorum.

+0

Benim düzenlemeyi gör - ASIO, sadece üstbilgiler – zaharpopov

4

kabul cevap% 100 etkili ve tavsiye edilen, ama gerçekten istediğiniz başka seçeneği,-/ ihtiyaç-DBOOST_ERROR_CODE_HEADER_ONLY ile başvurunuzu derleme denemek için Asio-olan Boost'u kullanmak için. Bu makronun kullanılması (belgeli here), Boost.System ile link bağlantısına ihtiyaç duyar. Ancak, this answer'da işaret edilen uyarıları okumaya değer.

#define BOOST_ERROR_CODE_HEADER_ONLY 
#include <boost/system/error_code.hpp> 

ve sadece dosya için optimizasyonu devre dışı: Özellikle, içeren bir 'kukla' ABM dosyası oluşturmak gerekebilir. (Şahsen, bunu yapmak zorunda değildim ama YMMV ...)

+1

Makro burada belgelenmiştir: http://www.boost.org/doc/libs/1_63_0/libs/system/doc/reference.html Ayrıca derleyici argümanında (-D ile) tanımlanması da işe yarar. – mantal

+0

@mantal, açıklama için teşekkürler, Boost.System dokümanlar için bir bağlantı eklemek için cevabımı düzenledim. – evadeflow

+1

MSVC I'de de -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB -DBOOST_SYSTEM_NO_LIB gerekiyordu. Yine de kukla bir cpp dosyasına gerek yoktu. – jtbr

İlgili konular