Boost - instalarea, configurarea și utilizarea unui impuls în

Boost este una dintre cele mai cunoscute și cel mai frecvent utilizate de către programatori C ++ biblioteci. Acum este dificil să ne imaginăm zona de programare (vorbesc despre C ++), care contribuie la creșterea nu ar fi folosit, sau cel puțin părți ale acestuia. De fapt, boost este un nume comun, un fel de banner, merge sub o grămadă de biblioteci diferite, care acoperă un număr foarte mare de sarcini de zi cu zi. Este din cauza faptului că stimularea simplifică în mod semnificativ și accelerează dezvoltarea de software, a câștigat popularitate atât de mult. Firește, stimula și utilizate pentru dezvoltarea de jocuri. pentru aceleași motive: economie de timp, fiabilitate, testată în timp, cunoscut (ușor de găsit programatori dreapta), ușurința de utilizare.

În cazul în care pentru a obține un impuls

Boost este un software gratuit și codul sursă se poate descărca de pe site-ul oficial. Apropo, există și documentarea completă a tuturor componentelor sale.

componentele Boost

Așa cum am spus, în impuls de care include un număr destul de mare de biblioteci. Apropo, un mare avantaj al impuls care este cross-platform, care este, funcționează pe Windows și pe Linux, MacOS și sub - adică, cu majoritatea sistemelor de operare cele mai comune. Și pentru a portul programul de sub Windows, de exemplu, sub MacOS, nu va fi necesar să atingeți codul care utilizează impuls - doar suficient pentru a recompilați programul și totul va funcționa.

Cele mai des utilizate următoarele componente Boost:

  • stimula :: ASIO - rețele de bibliotecă. După un timp am învățat să arate cum să-l folosească.
  • stimula :: bind - biblioteca de multe ori folosite, există vrapery pentru fukntorov utilizare ușoară, indicii de funcții, etc.
  • stimula :: CRC - funcții de bibliotecă CRC (control)
  • stimula :: datetime - cu funcția / perioade de timp dată / oră
  • :: stimula sistemului de fișiere - funcții funcționează cu fișiere și sistemul de fișiere
  • stimula :: Funcția - ambalaje pentru apeluri amânate de funcții și punerea în aplicare a apel invers
  • stimula :: Interprocess - funcții de interacțiune mezhprotsessonogo. Utilizarea lor diferite procese (programe) pot comunica între ele.
  • stimula :: Pool - funcționalitate de a lucra cu Pullen
  • stimula :: ProgramOptions - funcția de operare ușoară cu programul Opitz
  • stimula :: Python - ambalaje pentru integrarea ușoară a unui piton în aplicațiile sau funcțiile rassharivaniya și bibliotecile din Python
  • stimula :: Regex - biblioteca pentru lucrul cu expresii regulate
  • stimula :: serializare - Serializare si deserializarea obiectelor. Puteți utiliza, de exemplu, pentru sozhraneniya starea de joc într-un fișier și a citit dintr-un fișier.
  • stimula :: Semnale / Signals2 - punerea în aplicare a conceptului de semnal / fantă. De exemplu, cu ajutorul acestei biblioteci, puteți organiza schimbul de mesaje (între monștrii în joc, de exemplu)
  • stimula :: SmartPtr - foarte des folosit de bibliotecă, care implementează conceptul de indicii inteligente. Munca fără ea este pur și simplu imposibil)))
  • există încă o mulțime de diverse alte componente

compilarea Boost

O parte din bibliotecile din boost nu necesită instalare și le veți putea folosi numai prin inklyudy. Dar o parte semnificativă, cu toate acestea, trebuie să înceapă să compilați în bibliotecă. Cea mai simplă metodă este de a utiliza un impuls-blocaj. Descarcă-l aici. aveți nevoie de un fișier, care este numit (în prezent, cea mai recentă versiune) boost-jam-3.1.18-1-ntx86.zip. Acest fișier arhivă este bjam.exe. ar trebui să fie plasat într-un fel de dosar, care este înregistrată în variabila de sistem% PATH%. Eu de obicei, arunca în C: / Windows /

Există, de asemenea, o modalitate mai bună: doar rula in boost'a bootstrap.bat un dosar - va aduna bjam cea mai recentă versiune pentru tine, este mai sigur și mai precisă.

Pentru a vedea toate opțiunile disponibile de asamblare este necesară pentru a intra comanda:

Înainte de începutul boost de asamblare asigurați-vă că discul va fi liber de cel puțin 3-4 GB de spațiu liber. Da, acest lucru este destul de mare impuls. Cu toate acestea, nu vă faceți griji - atunci când colecta programele folosind impuls, acestea nu vor crește până la dimensiunea gigabyte - trebuie doar să stimuleze colectează toate bibliotecile dintr-o grămadă de opțiuni diferite (care leagă), și apoi, în ansamblul programelor dumneavoastră, acestea vor fi adăugate numai ați utilizat într-adevăr funcția de impuls și nu întreaga bibliotecă. Dacă oricare dintre opțiunile de legătură nu vor utiliza niciodată - le puteți dezactiva, și apoi compilare a ansamblului va avea loc mult mai rapid decât boost. Cu toate acestea, niciodată în avans, nu știu, au nevoie de ea sau nu, prin urmare, este mai bine să compilați totul - lăsați-l să fie, nu va fi de prisos.

Deci, să executați ansamblul:

Am dezactivat Sorka impuls piton, deoarece nu avem nevoie. Dacă aveți nevoie de ea, și Python (inclusiv codul sursă și libs) ar trebui să aveți pe computer - nu-l deconectați.

Acum vă puteți turna o cafea, porniți serialele TV preferate și o lungă perioadă de timp pentru a viziona ... Procesul de elaborare a unui impuls foarte (bine, sooooo) nu este rapid. Te implor - face ansamblul stimula tine, nu încercați să găsiți în cazul în care să-l descărcați la o rețea - chiar dacă puteți găsi, există o probabilitate foarte mare ca este pur si simplu nu zrabotaet ...

La momentul compilării, poate rula destul de multe de varningov - pur și simplu nu acorde atenție la ei - ansamblul trebuie încă să fie de succes.

În funcție de puterea calculatorului, undeva în 20-60 de minute, a construi un impuls de peste. În boost'a dosar nou dosar apare „etapa / libs“ - există toate biblioteca impuls colectate.

Conectarea la Boost Visual C ++

Rămâne doar să adăugați dosarul în lista de foldere Visual Studio Bibliotecile sunt. În lista de dosare, adăugați inklyudov „vasha_papka_gde_bust / impuls“ - există impuls inklyudy și libs a adăugat directorul „gde_lezhit_bust / etapa / lib“. Instalarea de supraalimentare este finalizată și este gata de utilizare. Pentru a verifica acest lucru, puteți lua orice exemplu de la site-ul boost'a și să încerce să-l compilați.

Această lecție este de peste. În următoarea lecție vă voi spune cum să instalați și să configurați prin luabind, care simplifica foarte mult viața noastră, ci mai degrabă va permite utilizarea mai ușoară Lua -script în programele noastre.

Mai multe despre acest subiect:

Doar oaspeți a scris:

aveți o lecție foarte bună.
Nu știu de unde să scrie întrebarea. Cele mai multe se potrivesc tema boost. Am înțeles că soluțiile în proiectarea sunt foarte dependente de problema, dar încă întrebam cum faci în acest caz.

Există unele caractere în depozit. Copac sau doar o listă. Și apoi ne-am dorit să facă relația dintre ele. Raportul dintre unu la unu. Cum de a face mai bine? Cărțile bune pe C ++, astfel laudă indicii inteligente care convenționale cât de mult frică de a utiliza uneori.

typedef stimula :: weak_ptr CharacterPtr;
rel struct
link-ul std :: pereche;
valoarea int; // structura de proprietate, pentru că putem fi conectate, în orice caz, aici nu doar o valoare numerică
>
/////

Chiar așa? Aceasta este, de alocare de memorie statică este mai bine să nu-l folosească? Sau ai putea crea pur și simplu un std :: vector și indicii de caractere *?

Și o întrebare stupidă: shared_ptr, arătând spre o memorie alocata static - aceasta probleme?

Doar designul în multe locuri se pare, și am fost un pic îngrijorat.

Doar oaspeți a scris:

Oh, am uitat că tag-ul tăiat. Nu știu cum să scrie mai bine acest lucru, atunci (în loc de paranteze unghiulare):

typedef stimula :: weak_ptr] Caracter [CharacterPtr;
rel struct
std :: pereche] CharacterPtr, CharacterPtr [link;

„Sau ai putea crea doar un std :: vector] Caracter [aratând caractere *?

Doar vector Tu nu va aborda în mod clar - cu adăugarea de noi caractere, vectorul poate transfera datele lor într-o nouă locație de memorie (date de relocare, în cazul lipsei vectorului curent de memorie rezervat) și apoi toate indicii vor deveni invalid, care, în cel mai bun caz, va duce pur și simplu la erori și este posibil să cadă de program.

Prin urmare, dacă aveți de gând să utilizeze indicii undeva la dvs. (Alfabet indiferent - inteligente sau în alt mod), vectorul ar trebui să fie stocate indicii (fie convenționale sau inteligente).

În același timp, dacă ai putea avea o situație în care unele dintre Chars a fost eliminat, dar se poate referi la alte farmece - cu siguranta ar trebui să fie stocate într-un shared_ptr'y vector, precum și link-uri către aceste caractere ale altor perșilor, de a folosi, de exemplu, indicii slabe (weak_ptr).

cel puțin prima vedere La, această abordare mi se pare cea mai rezonabilă.

Doar oaspeți a scris:

> La adăugarea de noi chars, vectorul poate transfera datele lor la un nou bloc de memorie
Hell, exact ca de obicei pe suprafata. Mulțumesc mult.

Un weak_ptr nu va pierde partajata, la care este atașat, cu relocarea? Pur și simplu nu știu detaliile dispozitivului său.

Doar oaspeți, a fost bucuros să vă ajute)

Nu uitați, de asemenea, că, dacă știi în avans Chars limită maximă (sumă) în matrice, puteți rezerva pur și simplu un spațiu prin vector.reserve () și apoi realokatsy garantat nu va. Pentru a afla cum puteți face vector.max_size utilizarea maximă de rezervă (). Cu toate acestea, dacă utilizați în continuare indicatorii convenționali - nu va fi în măsură să rearanja elemente ale vectorului (un fel de, să zicem).

datele Sharedpointer nu este pierdut, nu vă faceți griji, precum indicatorul slab aparent nu ar trebui. Deși în detrimentul celor slabi - nu am încredere 100%. Trebuie să vedem literatura de specialitate, sau cel mai simplu pentru a testa un cod simplu)

Multumesc pentru articol.
Întrebarea - atunci când compilarea impuls a produs mai multe versiuni ale bibliotecilor, cum ar fi boost_iostreams
libboost_iostreams-vc80-mt-1_47.lib
libboost_iostreams-vc80-mt-Gd-1_47.lib
libboost_iostreams-vc80-mt-s-1_47.lib
libboost_iostreams-vc80-mt-1_47.lib-SGD
libboost_iostreams-vc80-s-1_47.lib
libboost_iostreams-vc80-1_47.lib-SGD
Care dintre ele pentru a utiliza pentru a depana multi-threaded? mt-gd sau mt-SGD?

Ardan, după cum îmi amintesc, ceva de genul:

s - Static Linking
mt - multitreded
d - debug

Prin urmare, pentru a alege libs opțiune, ceea ce corespunde cu setările programului dumneavoastră (pe care le-ați stabilit în Project Settings).

Bună ziua, Vă rugăm să ajute în următoarele situații:
1) este necesar să se conecteze biblioteca de sprijin ERF funcție
2) în mâinile arhivei „boost_1_47_0“
3) l-am despachetat pe desktop și a lansat bootstrap
4) este apoi lansat și b2 a apărut bjam
5) atunci când sunt compilate sub prezența exprimării în cap
„#include
using namespace impuls;
#include "

Nimic nu a venit din ea, face clar în acest sens:
“... adăuga acest dosar la lista de foldere Visual Studio biblioteci. În lista de dosare, adăugați inklyudov „vasha_papka_gde_bust / impuls“ - există impuls inklyudy și libs a adăugat directorul „gde_lezhit_bust / etapa / lib“. Instalarea de supraalimentare este finalizată și este gata de utilizare ... "
- cum să adăugați la lista de dosare de bibliotecă inklyudov (în cazul în care VS are o structură similară buton de operare sau secvență).

Dosare de scenă și nu există în arhivă

Aproximativ Programul se află în calea:
C: \ Program Files \ Microsoft Visual Studio 8 \

1. Boost compilat în mod normal, fără erori?
2. inklyud Tu al fișierului în cazul în care funcțiile pe care le utilizați, nu?
3. Va apărea dosarul atunci când _uspeshno_soberotsya_ impuls (mai precis în timpul asamblării)
4. Pentru a adăuga un dosar la lista de biblioteci face acest lucru: Meniu principal> Instrumente> Opțiuni> proiecte și solutiuons> vc ++ directoare. Chiar în partea de sus a listei drop-down, selectați „includ fișiere“ (care ar indica drumul spre Heather) sau „fișierele bibliotecă“ (care ar indica drumul spre libam). Apăsați butonul cu directorul de imagine (sub lista drop-down), este înscris în linia apare calea completă. Faceți clic pe "OK". Efectuat.
5. Dosarele nu trebuie să specifice pe impuls, pe care ați extras din arhiva dosarul, care a apărut pe disc în timpul asamblării (de exemplu, l-am creat în directorul rădăcină numit Boost - în ea, în același timp, există toate libs + Heder și nimic mai mult de prisos).

Vă mulțumesc, dar, probabil, tot ce ai nevoie pentru a transporta și re-livra
1) impuls a fost compilat fără toate opririle și avertismente
2) Subliniez toate căile posibile și fișierele care sunt într-un fel legate de utilizarea funcției dorite
3) um ...
4) toate crea unul, mulțumesc pentru serializarea
5) Adevărul este 4 punct, am arătat calea spre locația Busto decomprimat pentru un alt Dumnezeu știe unde descheiat (vă în fașă, și am unde să găsească chiar și numele dat nimic impuls)
6) reporniți instalarea a încercat să stimuleze, dar el a rostogolit imediat (văzut vede că totul a fost deja instalat)

El jură că a fost faptul că el nu a putut găsi o astfel de funcție?
Dacă este așa, eu încerc să-și asume lucru absolut evident: poate că tocmai ați uitat să specificați: using namespace impuls; sau este necesar pentru a apela o funcție ca impuls :: ERF

Poate că acest lucru este problema?

explicat în mod clar într-un liliac-fișier care ar trebui să fie utilizate pentru a compila VisualC ++. Dacă doriți să construiască un Bolrand Builder, setările trebuie să fie schimbate. Cred că într-un fel ca acest lucru ar trebui să arate instrucțiuni construiește un constructor:
bjam -toolset = borlandc
sau ca aceasta:
bjam -toolset = Borland

În același timp, după cum îmi amintesc, „proaspete“ versiune (care începe fie 1.3.3 dacă există undeva) nu merg la un constructor. În timp ce aici, în acest lucru ar putea fi greșit, pur și simplu Builder nu utilizează mai multe ori pentru a ieși din cincea versiune (adică de 10 ani deja). Cel mai bine, în acest caz, este, probabil, va încerca să accelerăm docuri.

Sunt un incepator in munca C ++ în Linux. Geany compilator mediu G ++. Aici este codul:
#include
#include
int main () int A. B. C. D;
std :: cout<<"введем две дроби"<>A >> B >> C >> D;
stimula :: rațională a (A, B), b (C, D);
std :: cout <<"a: " < std :: cout <<"a + b = " <<(a + b) <<"\n";
std :: cout<<"a * b="<<(a*b)<>
Codul funcționează. Așa că am conectat boost? Așa că se pot bucura de toate caracteristicile care sunt incluse în boost? Sau nu pot? Faptul că am încercat să curgă câteva exemple de impuls .sayta, și nu a mers. Ce sfătui în acest caz? Spvsibo.

#include
#include
int main () int A. B. C. D;
std :: cout<<"введем две дроби"<>A >> B >> C >> D;
stimula :: rațională a (A, B), b (C, D);
std :: cout <<"a: " <
std :: cout <<"a + b = " <<(a + b) <<"\n";
std :: cout<<"a * b="<<(a*b)<> Nu a atras pe deplin codul din mesajul anterior

vă rugăm să ajute
kyute a văzut nici un impuls

INCLUDEPATH + = "C: \ boost_1_55_0 \ impuls"
LIBS + = "C: /boost_1_55_0/stage/lib/libboost_wserialization-vc90-mt-gd-1_55.lib"
LIBS + = "C: /boost_1_55_0/stage/lib/libboost_serialization-vc90-mt-1_55.lib"

Campiglio demo.cpp exemplu al bibliotecii impuls serializare
Eroare de referință nedefinit

Un mic avertisment:
Adăugat la suplimentare includ directoare în studio nevoie nu „vasha_papka_gde_bust / impuls“, și rădăcină, adică în acest caz, „vasha_papka_gde_bust“.