
3 Börja arbeta
3.1 Ăversikt
3.2 FörutsÀttningar
3.2.1 Ladda ner ns-3 som ett kÀllkodsarkiv
3.3 Ladda ner ns-3 med Git
3.3.1 Ladda ner ns-3 med Bake
3.4 Bygga ns-3
3.4.1 Bygga med build.py
3.4.2 Bygga med Bake
3.4.3 Bygga med Waf
3.5 Testa ns-3
3.6 Köra skript
3.6.1 Kommandoradsargument
3.6.2 Felsökning
3.6.3 Arbetskatalog
Kapitel 3
Börja arbeta
Detta kapitel syftar till att förbereda lÀsaren för arbete, med en dator dÀr ns-3 kanske aldrig tidigare har installerats. Presentationen tÀcker stödda plattformar, förutsÀttningar, sÀtt att fÄ ns-3, sÀtt att bygga ns-3 och sÀtt att kontrollera din byggnad och köra enkla program.
3.1 Ăversikt
ns-3-simulatorn Àr konstruerad som ett system av samarbetande programbibliotek. Vid byggande lÀnkas koden för anvÀndarprogram med dessa bibliotek. För att skriva anvÀndarprogram anvÀnds programmeringssprÄken C++ eller Python.
ns-3 distribueras som kÀllkod, vilket innebÀr att mÄlsystemet mÄste ha en programvaruutvecklingsmiljö för att först bygga biblioteken och sedan bygga anvÀndarprogrammet. I princip kan ns-3 distribueras som fÀrdiga bibliotek för specifika system, och i framtiden kan de distribueras pÄ det sÀttet. Men för nÀrvarande utför mÄnga anvÀndare faktiskt sitt arbete genom att redigera sjÀlva ns-3, sÄ det Àr bra att ha kÀllkoden för att bygga biblioteken. Om nÄgon skulle vilja ta pÄ sig jobbet att skapa fÀrdiga bibliotek och paket för operativsystem, vÀnligen kontakta e-postlistan. ns-developers.
HÀr kommer vi att titta pÄ tre sÀtt att ladda ner och bygga ns-3. Den första Àr att ladda ner och bygga den officiella versionen frÄn huvudsidan. Den andra Àr att vÀlja och bygga kopior av utvecklingsversionerna av grundinstallationen av ns-3. Den tredje Àr att anvÀnda ytterligare byggverktyg för att ladda ner fler tillÀgg för ns-3. Vi kommer att gÄ igenom var och en, eftersom verktygen nÄgot skiljer sig Ät.
Erfarna Linux-anvÀndare kan undra varför ns-3 inte erbjuds som ett paket, som de flesta andra bibliotek som anvÀnder paketmanagern? Trots att det finns binÀrpaket för olika Linux-distributioner (t.ex. Debian), slutar de flesta anvÀndarna till slut med att redigera biblioteken och mÄste sjÀlva kompilera ns-3, sÄ tillgÄngen till kÀllkoden Àr bekvÀm. Av denna anledning kommer vi att fokusera pÄ installation frÄn kÀllkod.
För de flesta tillÀmpningar behövs inte ns-3-licenser root och det rekommenderas att anvÀnda ett icke-privilegerat anvÀndarkonto.
3.2 FörutsÀttningar
Hela uppsÀttningen av tillgÀngliga ns-3-bibliotek har en rad beroenden av externa bibliotek, men i de flesta fall kan ns-3 kompileras och anvÀndas med stöd för flera vanliga (ofta förinstallerade) komponenter: C++-kompilator, Python, kÀllkodsredigerare (t.ex. vim, emacs eller Eclipse) och, om utvecklingsförrÄd anvÀnds, versionshanteringssystemet Git. De flesta nybörjare behöver inte bekymra sig om deras konfiguration rapporterar nÄgra saknade extra funktioner för ns-3, men för dem som önskar en fullstÀndig installation erbjuder projektet en wiki som inkluderar sidor med mÄnga anvÀndbara tips och rÄd. En sÄdan sida Àr "Installations"-sidan med installationsinstruktioner för olika system, tillgÀngliga pÄ: .
Avsnittet "FörutsÀttningar" pÄ denna wiki-sida förklarar vilka paket som krÀvs för att stödja allmÀnna ns-3-alternativ, och ger Àven kommandon som anvÀnds för att installera dem i vanliga Linux- eller macOS-varianter.
Du kan dra nytta av möjligheten att utforska ns-3:s wiki-sida eller den huvudsakliga webbplatsen: , eftersom det finns mycket information dÀr. FrÄn och med den senaste versionen av ns-3 (ns-3.29) krÀvs följande verktyg för att köra ns-3:
Verktyg Paket/version
- C++-kompilator
clang++ eller g++ (g++ version 4.9 eller högre) - Python
python2 version >= 2.7.10, eller python3 version >=3.4 - Git
vilken senaste version som helst (för Ätkomst till ns-3 pÄ GitLab.com) - tar
vilken senaste version som helst (för att packa upp ns-3-release) - bunzip2
vilken senaste version som helst (för att packa upp ns-3-release)
För att kontrollera den standardinstallerade versionen av Python, skriv python -VFör att kontrollera versionen av g++, skriv g++ -v. Om nÄgra verktyg saknas eller Àr för gamla, hÀnvisa till installationsguiden pÄ ns-3:s wiki-sida.
FrÄn och med nu antar vi att lÀsaren arbetar i Linux, MacOS eller en Linux-emulator och har minst de ovan nÀmnda verktygen.
3.2.1 Ladda ner ns-3 som ett kÀllkodsarkiv
Detta Ă€r en handlingsplan för en ny anvĂ€ndare som vill ladda ner och experimentera med de senaste utgivnings- och paketversionerna av ns-3. UtgĂ„vor av ns-3 publiceras i form av komprimerade kĂ€llkodspaket, ibland kallade tarball. tarball â ett speciellt format för programarkiv dĂ€r flera filer sammanfogas. Arkivet Ă€r vanligtvis komprimerat. Processen för att ladda ner ns-3 via tarball Ă€r enkel; du behöver bara vĂ€lja en utgĂ„va, ladda ner och packa upp den.
Anta att du som anvÀndare vill bygga ns-3 i en lokal katalog som heter workspace. Du kan fÄ en arbetskopia av utgÄvan genom att skriva följande i Linux-konsolen (sjÀlvklart med de korrekta versionsnumren)
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2
$ tar xjf ns-allinone-3.29.tar.bz2 TÀnk pÄ utilityn som anvÀndes ovan, wgetsom Àr ett kommandoradsverktyg för att ladda ner objekt frÄn internet. Om du inte har installerat det kan du anvÀnda din webblÀsare för detta.
Genom att följa dessa steg kommer du att gÄ till katalogen ns-allinone-3.29, dÀr du bör se flera filer och kataloger.
$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.pyNu Àr du redo att bygga basdistributionsversionen av ns-3 och kan gÄ vidare till avsnittet som handlar om att bygga ns-3.
3.3 Ladda ner ns-3 med Git
Koden för ns-3 finns pÄ Git-repositorier pÄ GitLab.com pÄ adressen . Gruppen nsnam samlade olika repositorier som anvÀnds av det öppna kÀllkodsprojektet.
Det enklaste sÀttet att börja anvÀnda Git-repositorier Àr att göra en fork eller klona miljön ns-3-allinone. Detta Àr en samling skript som hanterar nedladdningen och byggandet av de mest anvÀnda delsystemen i ns-3. Om du Àr ny pÄ Git kan termerna "fork" och "kloning" vara okÀnda för dig; om sÄ Àr fallet rekommenderar vi att du bara klonar (skapar en egen kopia) av lagret som finns pÄ GitLab.com pÄ följande sÀtt:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone Vid denna tidpunkt ser din katalog ut sÄ hÀr ns-3-allinone skiljer sig nÄgot frÄn den ovan beskrevna katalogen med versionsarkivet. Den ska se ut ungefÀr sÄ hÀr:
$ ls
build.py constants.py download.py README util.pyObservera att skriptet download.py, som dessutom hÀmtar ns-3 och den medföljande kÀllkoden. HÀr har du val: antingen ladda ner den senaste utvecklingssnapshoten av ns-3:
$ python download.pyeller föredra versionen av ns-3, med hjÀlp av flaggan -n för att ange versionsnumret:
$ python download.py -n ns-3.29Efter detta steg kommer ytterligare förvar att laddas ner till katalogen ns-3-allinone ns-3 bake, pybindgen, netanim och PÄ en ren Ubuntu16.04-maskin behövde jag Àndra kommandot till följande:.
AnmÀrkning
$ sudo python3 download.py -n ns-3.29 (hÀr och framöver översÀttarens kommentarer). De tvÄ ovan nÀmnda metoderna (kÀllkodens arkiv eller förvaret
3.3.1 Ladda ner ns-3 med Bake
genom Git) Àr anvÀndbara för att erhÄlla den enklaste installationen av ns-3 med flera tillÀgg ( ns-3-allinone för att generera Python-bindningar ochnetanim för att animera nÀtverket). Det tredje förvaret, som tillhandahÄlls som standard i ns-3-allinone, kallas PÄ en ren Ubuntu16.04-maskin behövde jag Àndra kommandot till följande: Bake pybindgen.
â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. kan anvĂ€ndas för att fĂ„ utvecklingsversioner av ns-3, samt för att ladda ner och bygga tillĂ€gg för basversionen av ns-3-distributionen, som miljön â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. Direct Code Execution CradleNetwork Simulation Cradle, , möjligheten att skapa nya Python-bindningar och olika "appar" av ns-3.CradleNetwork Simulation Cradle Ă€r en ramverk som tillĂ„ter att anvĂ€nda verkliga nĂ€tverksstackar TCP / IP inom nĂ€tverkssimulatorn.
AnmÀrkning
Om du förvÀntar dig att din installation av ns-3 ska ha avancerade eller extra funktioner kan du följa denna installationsvÀg.
I de senaste versionerna av ns-3
har det lagts till i tar-versionen. I versionen ingĂ„r en konfigurationsfil som möjliggör nedladdning av aktuella programvaruversioner vid tidpunkten för versionens skapande. Det betyder till exempel att versionen â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. , som distribueras med versionen ns-3.29, kan anvĂ€ndas för att fĂ„ komponenter för denna version av ns-3 eller tidigare, men kan inte anvĂ€ndas för att hĂ€mta komponenter för senare versioner (om paketbeskrivningsfilen â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet.bakeconf.xml inte har uppdaterats). Du kan ocksĂ„ fĂ„ den senaste kopian
, genom att ange följande kommando i din Linux-konsol (förutsatt att du har Git installerat): pybindgen, skriv följande kommando i din Linux-konsol (förutsatt att du har Git installerat):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitNÀr du kör git-kommandot bör du se nÄgot som liknar följande:
Klonar in i 'bake'...
remote: UpprÀkning av objekt: 2086, klart.
remote: RĂ€kning av objekt: 100% (2086/2086), klart.
remote: Komprimering av objekt: 100% (649/649), klart.
remote: Totalt 2086 (delta 1404), ÄteranvÀnda 2078 (delta 1399)
Mottar objekt: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, klart.
Löser deltan: 100% (1404/1404), klart.NÀr kommandot har slutförts clone ska du ha en katalog med namnet pybindgen, vars innehÄll ska se ut ungefÀr sÄ hÀr:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOObservera att du har laddat ner flera Python-skript, en Python-modul med namnet pybindgen och en konfigurationsfil i XML. NÀsta steg blir att anvÀnda dessa skript för att ladda ner och bygga den ns-3-distribution du vÀljer. Det finns flera konfigurationsmÄl tillgÀngliga:
ns-3.29: en modul som motsvarar en version; den kommer att ladda ner komponenter som liknar versionen i tarball;
ns-3-dev: en liknande modul, men med kod frÄn utvecklingsgrenen;
ns-allinone-3.29: en modul som inkluderar andra tillÀggsfunktioner, sÄsom Click-routing och Network Simulation Cradle, Openflow för ns-3.
ns-3-allinone: liknande den stabila versionen av modulen allinone, men för utvecklingskoden.
AnmÀrkning
Click â en modulĂ€r programvaruarkitektur för att skapa routrar.
Openflow Àr en protokoll för hantering av processen för databehandling som passerar genom datanÀtverk av routrar och switchar, vilket implementerar teknik för programvarukonfigurerade nÀtverk.
Den aktuella utvecklingssnapshot (icke-releaserad) av ns-3 kan hittas pÄ:.
Utvecklarna strÀvar efter att hÄlla dessa arkiv i ett sammanhÀngande arbetsförhÄllande, men de Àr under utveckling och innehÄller icke-releasad kod, sÄ om du inte planerar att anvÀnda nya funktioner bör du vÀlja den officiella releasen.
Du kan hitta den senaste versionen av koden genom att blÀddra igenom listan över arkiv, eller genom att besöka webbplatsen för 'ns-3 Releases': och klicka pÄ lÀnken för den senaste versionen. I det hÀr exemplet kommer vi att fortsÀtta med ns-3.29.
Nu för att fĂ„ de nödvĂ€ndiga komponenterna av ns-3, kommer vi att anvĂ€nda verktyget â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet.. LĂ„t oss sĂ€ga nĂ„gra inledande ord om hur â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet..
Bake fungerar, genom att ladda ner kĂ€llfiler för paketen till katalogen source och installera biblioteken i byggkatalogen. â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. kan startas genom att referera till den binĂ€ra filen, men om du vill köra â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. inte frĂ„n den katalog den laddades upp till, det Ă€r önskvĂ€rt att lĂ€gga till sökvĂ€gen till pybindgen din sökvĂ€g (miljövariabel PATH), till exempel pĂ„ följande sĂ€tt (exempel för kommandotolk Linux bash). GĂ„ till katalogen "bake" och stĂ€ll sedan in följande miljövariabler:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libDetta kommer att placera programmet bake.py i kommandotolkens sökvĂ€g och tillĂ„ta andra program att hitta de körbara filer och bibliotek som skapades av pybindgen. I vissa anvĂ€ndningsfall pybindgen, den ovan beskrivna installationen av PATH och PYTHONPATH krĂ€vs inte, men för en fullstĂ€ndig installation av nsâ3-allinone (med ytterligare paket) Ă€r den vanligtvis nödvĂ€ndig.
GÄ till arbetskatalogen och skriv följande i kommandotolken:
$ ./bake.py configure -e ns-3.29Sedan kommer vi att be â ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. att kontrollera om vi har tillrĂ€ckligt med verktyg för att ladda ner olika komponenter. Skriv:
$ ./bake.py checkDu bör se nÄgot liknande följande:
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar-tool - OK
> Unzip-tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> SökvÀg som söks för verktyg: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...Specifikt Àr laddningsverktyg som Mercurial, CVS, Git och Bazaar grundlÀggande i detta steg, eftersom de gör det möjligt för oss att hÀmta koden. Vid detta stadium installerar du de saknade verktygen pÄ det vanliga sÀttet för ditt system (om du kan) eller ber om hjÀlp frÄn din systemadministratör.
Försök sedan ladda ner programvaran:
$ ./bake.py downloadresultatet bör vara nÄgot i stil med:
>> Söker efter systemberoende setuptools - OK
>> Söker efter systemberoende libgoocanvas2 - OK
>> Söker efter systemberoende gi-cairo - OK
>> Söker efter systemberoende pygobject - OK
>> Söker efter systemberoende pygraphviz - OK
>> Söker efter systemberoende python-dev - OK
>> Söker efter systemberoende qt - OK
>> Söker efter systemberoende g++ - OK
>> Laddar ner pybindgen-0.19.0.post4+ng823d8b2 (mÄlkatalog: pybindgen) - OK
>> Laddar ner netanim-3.108 - OK
>> Laddar ner ns-3.29 - OKDetta betyder att tre kÀllkoder har laddats ner. GÄ nu till kÀllkatalogen och skriv ls; du bör se:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenNu Ă€r du redo att bygga distributionen av nsâ3.
3.4 Bygga ns-3
Precis som vid nedladdning av nsâ3 finns det flera sĂ€tt att bygga nsâ3. Det viktigaste Ă€r att vi vill betona att nsâ3 byggs med ett byggverktyg som kallas Waf, beskrivet nedan. De flesta anvĂ€ndare kommer att arbeta med Waf, men det finns flera anvĂ€ndbara skript som kan hjĂ€lpa dig att komma igĂ„ng eller organisera mer komplexa byggen. SĂ„, vĂ€nligen lĂ€s först om Waf, ta en titt pĂ„ build.py och bygget med pybindgen.
3.4.1 Bygga med build.py
Varning! Detta byggsteg Àr endast tillgÀngligt frÄn versionspaketet som erhÄllits enligt ovan, och inte nedladdat via git eller bake.
Vid arbete med release-paketet tarball, i nsâ3âallinone finns det ett anvĂ€ndbart skript som kan förenkla uppbyggnaden av komponenter. Det heter build.py. Detta program kommer att konfigurera projektet pĂ„ det mest anvĂ€ndbara sĂ€ttet för dig. Observera dock att mer komplexa konfigurationer och arbete med nsâ3 vanligtvis involverar anvĂ€ndning av det egna byggsystemet nsâ3, Waf, som kommer att presenteras senare i denna handbok.
Om du har laddat ner via tarball, bör det finnas en katalog i din mapp ~/workspace med ett namn som Àr nÄgot i stil med ns-allinone-3.29. Skriv följande:
$ ./build.py --enable-examples --enable-tests
Vid anrop av build.py vi tillĂ€mpade kommandoradsargument för att bygga de exempel och tester som anvĂ€nds i denna handbok, vilka inte byggs som standard i nsâ3. Som standard bygger programmet Ă€ven alla tillgĂ€ngliga moduler. Sedan, om du önskar, kan du bygga nsâ3 utan exempel och tester eller utesluta moduler som inte behövs för ditt arbete.
Du kommer att se mĂ„nga utdata frĂ„n kompileraren som visas av skriptet nĂ€r det bygger olika delar som du har laddat ner. Först kommer skriptet att försöka bygga animatorn PĂ„ en ren Ubuntu16.04-maskin behövde jag Ă€ndra kommandot till följande:, sedan bindningsgeneratorn netanim och slutligen nsâ3. NĂ€r processen Ă€r klar bör du se följande:
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Built modules:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.29I de sista tre raderna av listan ser vi ett meddelande om moduler som inte har byggts:
Modules not built (see ns-3 tutorial for explanation):
brite clickDet betyder helt enkelt att vissa ns-3-moduler som Àr beroende av externa bibliotek kanske inte har kompilerats, eller att deras kompilering inte krÀvs för den aktuella konfigurationen. Det betyder inte att simulatorn har misslyckats med att byggas eller att de kompilerade modulerna kommer att fungera felaktigt.
3.4.2 Bygga med Bake
Om du anvÀnde bake för att hÀmta kÀllkoden frÄn projektets repositories, kan du fortsÀtta anvÀnda det för att bygga ns-3. Skriv:
$ ./bake.py buildoch du bör se nÄgot liknande:
>> Bygger pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Bygger netanim-3.108 - OK
>> Bygger ns-3.29 - OKTips: du kan ocksÄ utföra bÄda stegen, nedladdning och byggande, genom att anropa "bake.py deploy".
Vid byggande av alla komponenter kan det uppstÄ fel, men byggandet fortsÀtter om komponenten inte Àr obligatorisk. Till exempel var ett nyligen problem med portabilitet att castxml kan kompileras med verktyget pybindgen inte pÄ alla plattformar. I sÄ fall kommer ett meddelande som följer:
>> Bygger castxml - Problem
> Problem: Valfri beroende, modul "castxml" misslyckades
Detta kan minska funktionaliteten i den slutliga byggnaden.
Dock kommer bake att fortsÀtta eftersom "castxml" inte Àr en vÀsentlig beroende.
För mer information, kör bake med -v eller -vvv för fullt detaljerat lÀge.Men castxml Àr endast nödvÀndig om du vill skapa uppdaterade Python-bindningar. För de flesta anvÀndare Àr detta inte nödvÀndigt (Ätminstone tills de börjar Àndra ns-3), sÄ sÄdana varningar kan för tillfÀllet sÀkert ignoreras.
Om ett fel intrÀffar, kommer nÀsta kommando att ge dig en antydan om saknade beroenden:
$ ./bake.py showOlika paketberoenden som du försöker bygga kommer att listas.
3.4.3 Bygga med Waf
Vid denna tidpunkt, för att pÄbörja byggandet av ns-3, har vi anvÀnt antingen skriptet build.py, eller verktyget pybindgen. Dessa verktyg Àr anvÀndbara för att bygga ns-3 och hantera biblioteken. Faktiskt kör de byggverktyget Waf frÄn ns-3-katalogen. Waf följer med kÀllkoden för ns-3. De flesta anvÀndare gÄr snabbt över till direkt anvÀndning av Waf. SÄ för att fortsÀtta, vÀnligen gÄ till ns-3-katalogen som du först skapade.
För tillfÀllet Àr detta inte strÀngt nödvÀndigt, men det kan vara bra att göra en liten avstickare och titta pÄ hur man gör Àndringar i projektkonfigurationen. Troligtvis Àr det mest anvÀndbara Àndringen av konfigurationen som du kan göra att skapa en optimerad version av koden. Som standard har du stÀllt in ditt projekt för att bygga en debug-version. LÄt oss titta pÄ projektet för att skapa en optimerad byggning. För att förklara för Waf att det ska göra optimerade byggningar som inkluderar exempel och tester, behöver du köra följande kommandon:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-testsDetta kommer att köra Waf utanför den lokala katalogen (för din bekvÀmlighet). Det första kommandot utför en rengöring av den tidigare byggningen, vilket vanligtvis inte Àr strÀngt nödvÀndigt, men det Àr en bra praxis (se ocksÄ byggprofilerna nedan); detta kommer att ta bort tidigare skapade bibliotek och objektfiler som finns i katalogen build/. NÀr projektet har omkonfigurerats och byggsystemet kontrollerar olika beroenden, bör du se en utskrift som liknar följande:
StÀller in top till : \/home\/ns3user\/workspace\/bake\/source\/ns-3-dev
StÀller ut till : \/home\/ns3user\/workspace\/bake\/source\/ns-3-dev\/build
Kontrollerar för 'gcc' (C kompilator) : \/usr\/bin\/gcc
Kontrollerar för cc-version : 7.3.0
Kontrollerar för 'g++' (C++ kompilator) : \/usr\/bin\/g++
Kontrollerar för kompilering flagga -march=native stöd : ok
Kontrollerar för kompilering flagga -Wl,--soname=foo stöd : ok
Kontrollerar för kompilering flagga -std=c++11 stöd : ok
Kontrollerar boost-includes : rubriker hittades inte, vÀnligen,!ange en --boost-includes argument (se hjÀlp)
Kontrollerar boost-includes : rubriker hittades inte, vÀnligen,!ange en --boost-includes argument (se hjÀlp)
Kontrollerar för program 'python' : \/usr\/bin\/python
Kontrollerar för python-version >= 2.3 : 2.7.15 python-config : \/usr\/bin\/python-config
FrÄgar python-config för pyembed '--cflags --libs --ldflags' flaggor : yes
Testar pyembed konfiguration : yes
FrÄgar python-config för pyext '--cflags --libs --ldflags' flaggor : yes
Testar pyext konfiguration : yes
Kontrollerar för kompilering flagga -fvisibility=hidden stöd : ok
Kontrollerar för kompilering flagga -Wno-array-bounds stöd : ok
Kontrollerar för pybindgen plats : ..\/pybindgen ,!(gissat)
Kontrollerar för python modul 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Kontrollerar för pybindgen version : 0.19.0. ,!post4+g823d8b2
Kontrollerar för kodsnutt : yes
Kontrollerar för typer uint64_t och unsigned long ekvivalens : no
Kontrollerar för kodsnutt : no
Kontrollerar för typer uint64_t och unsigned long long ekvivalens : yes
Kontrollerar för apidefs som kan anvÀndas för Python bindningar : gcc-LP64
Kontrollerar för intern GCC cxxabi : komplett
Kontrollerar för python modul 'pygccxml' : inte hittad
Kontrollerar för klick plats : inte hittad
Kontrollerar för program 'pkg-config' : \/usr\/bin\/pkg- ,!config
Kontrollerar för 'gtk+-3.0' : inte hittad
Kontrollerar för 'libxml-2.0' : yes
kontrollerar för uint128_t : inte hittad
kontrollerar för __uint128_t : yes
Kontrollerar hög precision implementering : 128-bit integer ,!(standard)
Kontrollerar för header stdint.h : yes
Kontrollerar för header inttypes.h : yes
Kontrollerar för header sys\/inttypes.h : inte hittad
Kontrollerar för header sys\/types.h : yes
Kontrollerar för header sys\/stat.h : yes
Kontrollerar för header dirent.h : yes
Kontrollerar för header stdlib.h : yes
Kontrollerar för header signal.h : yes
Kontrollerar för header pthread.h : yes
Kontrollerar för header stdint.h : yes
Kontrollerar för header inttypes.h : yes
Kontrollerar för header sys\/inttypes.h : inte hittad
Kontrollerar för bibliotek rt : yes
Kontrollerar för header sys\/ioctl.h : yes
Kontrollerar för header net\/if.h : yes
Kontrollerar för header net\/ethernet.h : yes
Kontrollerar för header linux\/if_tun.h : yes
Kontrollerar för header netpacket\/packet.h : yes
Kontrollerar för NSC plats : inte hittad
Kontrollerar för 'sqlite3' : inte hittad
Kontrollerar för header linux\/if_tun.h : yes
Kontrollerar för python modul 'gi' : 3.26.1
Kontrollerar för python modul 'gi.repository.GObject' : ok
Kontrollerar för python modul 'cairo' : ok
Kontrollerar för python modul 'pygraphviz' : 1.4rc1
Kontrollerar för python modul 'gi.repository.Gtk' : ok
Kontrollerar för python modul 'gi.repository.Gdk' : ok
Kontrollerar för python modul 'gi.repository.Pango' : ok
Kontrollerar för python modul 'gi.repository.GooCanvas' : ok
Kontrollerar för program 'sudo' : \/usr\/bin\/sudo
Kontrollerar för program 'valgrind' : inte hittad
Kontrollerar för 'gsl' : inte hittad python-config : inte hittad
Kontrollerar för kompilering flagga -fstrict-aliasing stöd : ok
Kontrollerar för kompilering flagga -fstrict-aliasing stöd : ok
Kontrollerar för kompilering flagga -Wstrict-aliasing stöd : ok
Kontrollerar för kompilering flagga -Wstrict-aliasing stöd : ok
Kontrollerar för program 'doxygen' : \/usr\/bin\/doxygen
---- Sammanfattning av valfria ns-3-funktioner:
Byggprofil : optimerad
Byggkatalog :
BRITE Integration : inte aktiverad (BRITE inte aktiverad (se alternativ --with- ,!brite))
DES Metrics hÀndelseinsamling : inte aktiverad (standardeinstÀllningar till inaktiverad)
Emulation FdNetDevice : aktiverad
Exempel : aktiverad
Filbeskrivare NetDevice : aktiverad
GNU Scientific Library (GSL) : inte aktiverad (GSL hittades inte)
Gcrypt bibliotek : inte aktiverad
(libgcrypt hittades inte: du kan anvÀnda ,!libgcrypt-config för att hitta dess plats.) GtkConfigStore : inte aktiverad (bibliotek 'gtk+-3.0 >= 3.0' inte hittades)
MPI Stödt : inte aktiverad (alternativ --enable-mpi inte valt)
ns-3 Click Integration : inte aktiverad (nsclick inte aktiverad (se alternativ --with- ,!nsclick))
ns-3 OpenFlow Integration : inte aktiverad (KrÀvde boost-bibliotek hittades inte)
Network Simulation Cradle : inte aktiverad (NSC hittades inte (se alternativ --with-nsc))
PlanetLab FdNetDevice : inte aktiverad (PlanetLab operativsystem upptÀcktes inte ,!(se alternativ --force-planetlab)) PyViz visualizer : aktiverad
Python API Skanning Stöd : inte aktiverad (missing 'pygccxml' python-modul)
Python Bindningar : aktiverad
Real Time Simulator : aktiverad
SQlite stats data utdata : inte aktiverad (bibliotek 'sqlite3' hittades inte)
Tap Bridge : aktiverad
Tap FdNetDevice : aktiverad
Tester : aktiverad
TrÄdning Primtiver : aktiverad
AnvÀnd sudo för att stÀlla in suid bit : inte aktiverad (alternativ --enable-sudo inte valt)
XmlIo : aktiverad
'configure' avslutades framgÄngsrikt (6.387s)Observera den sista delen av listan ovan. Vissa ns-3-alternativ Àr inte aktiverade som standard eller krÀver systemstöd för att fungera korrekt. Till exempel, för att aktivera XmlTo, mÄste biblioteket libxml-2.0vara nÀrvarande. Om detta bibliotek inte kunde hittas och motsvarande ns-3-funktion inte var aktiverad, kommer ett meddelande att visas. Observera ocksÄ att det finns möjlighet att anvÀnda kommandot sudo för att stÀlla in suid-bit, "installera grupp-ID vid körning", pÄ vissa program. Denna funktion Àr inte aktiverad som standard och visas dÀrför som "inte aktiverad". Slutligen, för att fÄ en lista över aktiverade alternativ, anvÀnd Waf med parametern --check-config.
LÄt oss nu gÄ tillbaka och vÀxla tillbaka till debug-byggnaden som innehÄller exempel och tester.
$ .\/waf clean
$ .\/waf configure --build-profile=debug --enable-examples --enable-testsByggsystemet Àr nu konfigurerat, och du kan kompilera debug-versioner av ns-3-program helt enkelt genom att skriva:
$ .\/wafĂven om de ovan beskrivna stegen tvingade dig att bygga delar av ns-3-systemet tvĂ„ gĂ„nger, vet du nu hur man Ă€ndrar konfigurationen och bygger optimerad kod.
För att kontrollera vilken profil som Àr aktiv för den aktuella projektkonfigurationen finns det ett kommando:
$ .\/waf --check-profile
Waf: Entering directory `\/path\/to\/ns-3-allinone\/ns-3.29\/build'
Build profile: debugDet scenari som diskuterats ovan build.py stöder ocksÄ argumenten --enable-examples och --enable-tests, men andra alternativ Waf stöder den inte direkt. Till exempel, detta kommer inte att fungera:
$ .\/build.py --disable-pythonreaktionen kommer att vara:
build.py: error: no such option: --disable-pythonDet bör noteras att specialoperatorn -âŻ- kan anvĂ€ndas för att skicka ytterligare parametrar genom waf, sĂ„ istĂ€llet för ovanstĂ„ende kommer följande kommando att fungera:
$ .\/build.py -- --disable-pythoneftersom det genererar huvudkommandot .\/waf configure âdisable-python. HĂ€r Ă€r nĂ„gra ytterligare inledande rĂ„d om Waf.
Felhantering vid kompilering
ns-3-utgÄvor har testats pÄ de senaste tillgÀngliga C++-kompilatorerna vid tidpunkten för utgivning pÄ vanliga Linux- och MacOS-distributioner. Med tiden slÀpps nya distributioner med nya kompilatorer, och dessa nyare kompilatorer Àr vanligtvis mer nogrÀknade nÀr det kommer till varningar. ns-3 konfigurerar sin byggprocess för att behandla alla varningar som fel, sÄ ibland, om du anvÀnder en Àldre version pÄ ett nyare system, kan en kompilatorvarning stoppa bygget.
Till exempel fanns tidigare ns-3.28 tillgÀnglig för Fedora 28, som inkluderade en ny huvudversion. gcc (gcc-8). Att bygga ns-3.28 eller tidigare versioner under Fedora 28, med Gtk2+ installerat, kan leda till följande fel:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of â__gtk_reserved1â [-Werror=parentheses] void (*__gtk_reserved1);I utgĂ„vor frĂ„n och med ns-3.28.1 Waf finns det ett alternativ för att lösa dessa problem. Det inaktiverar installationen av flaggan "-Werror" i g++ och clang++. Det hĂ€r alternativet "--disable-werror" ska anvĂ€ndas under konfigurationen:
$ ./waf configure --disable-werror --enable-examples --enable-testsAtt konfigurera eller bygga
Vissa kommandon Waf Àr meningsfulla endast under konfigurationsfasen, medan andra fungerar bara under byggfasen. Till exempel, om du vill anvÀnda ns-3:s emuleringsfunktioner, kan du aktivera bitinstÀllningen suid genom att anvÀnda sudo, som beskrivits ovan. Detta kommer att ogiltigförklara kommandon frÄn konfigurationssteget, och sÄ kan du Àndra konfigurationen med följande kommando, som ocksÄ inkluderar exempel och tester.
$ ./waf configure --enable-sudo --enable-examples --enable-testsOm du gör detta, Waf kommer att köra sudo, för att Àndra program för att skapa emuleringssockel för att köras med rÀttigheter. root. I Waf Det finns mÄnga andra alternativ för konfigurations- och byggstegen. För att utforska alternativen, skriv:
$ ./waf --helpI nÀsta avsnitt kommer vi att anvÀnda nÄgra alternativ relaterade till testning.
Byggprofiler
Vi har redan sett hur man kan anpassa Waf för byggen. debug och optimized:
$ ./waf --build-profile=debugDet finns ocksÄ en mellanprofil för byggen, release. Alternativet -d Àr en synonym för --build-profile. Byggprofilen styr anvÀndningen av loggning, assertions och kompilatorns optimeringsnycklar:

Som man kan se Àr loggning och pÄstÄenden endast tillgÀngliga i debugbyggnader. Den rekommenderade metoden Àr att utveckla ditt skript i debuglÀge och sedan utföra flera körningar (för statistik eller parameterÀndringar) i den optimerade byggprofilen.
Om du har kod som endast ska köras i vissa byggprofiler, anvÀnd makrot Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "En del av en utmatningsrad..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "FĂ€rdig: " << timer << std::endl;)Som standard, Waf placerar byggartefakter i byggmappen. Du kan ange en annan utmatningsmapp med hjĂ€lp av alternativet -âŻ-out, till exempel:
$ ./waf configure --out=my-build-dirGenom att kombinera detta med byggprofiler kan du enkelt vÀxla mellan olika kompilationsalternativ:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...vilket gör att du kan arbeta med flera byggnader utan att behöva skriva om den senaste byggningen varje gÄng. NÀr du vÀxlar till en annan profil, Waf kommer den endast att kompilera den, utan att Äterkompilera allt.
NÀr du pÄ detta sÀtt vÀxlar byggprofiler, krÀvs det att du alltid anger samma konfigurationsparametrar. Du kan undvika misstag genom att definiera flera miljövariabler:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf buildKompilatorer och flaggor
I ovanstÄende exempel Waf för att bygga ns-3 anvÀnds C++-kompilatorn frÄn GCC ( g++). Men det gÄr att Àndra den anvÀnda Waf C++-kompilatorn genom att definiera miljövariabeln CXX. Till exempel, för att anvÀnda C++-kompilatorn Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build PÄ liknande sÀtt kan du konfigurera Waf för att anvÀnda distribuerad kompilering med hjÀlp av distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf buildMer information om distcc och distribuerad kompilering finns pÄ projektets sida under avsnittet "Dokumentation". För att lÀgga till kompilatorflaggor vid konfiguration av ns-3, anvÀnd miljövariabeln CXXFLAGS_EXTRA.
Installation
Waf kan anvÀndas för att installera bibliotek pÄ olika stÀllen i systemet. Som standard ligger de insamlade biblioteken och körbara filer i katalogen build, och eftersom Waf kÀnner till platsen för dessa bibliotek och körbara filer, finns det inget behov av att installera biblioteken nÄgon annanstans.
Om anvĂ€ndarna föredrar att installera utanför byggkatalogen kan de köra kommandot .\/waf install. Som standard Ă€r prefixet för installationen â /usr/local, dĂ€rför .\/waf install kommer att installera program i /usr/local/bin, bibliotek i /usr/local/lib och header-filer i /usr/local/include. SuperanvĂ€ndarrĂ€ttigheter behövs vanligtvis för att installera med standardprefix, sĂ„ det vanliga kommandot blir sudo .\/waf install. NĂ€r Waf körs kommer det först att föredra att anvĂ€nda gemensamma bibliotek i byggkatalogen, och sedan leta efter bibliotek i bibliotekssökvĂ€gen som Ă€r instĂ€lld i den lokala miljön. SĂ„ nĂ€r bibliotek installeras i systemet Ă€r det bra praxis att kontrollera att de rĂ€tta biblioteken anvĂ€nds. AnvĂ€ndarna kan vĂ€lja att installera med ett annat prefix genom att skicka alternativet --prefix, till exempel:
.\/waf configure --prefix=\/opt\/localOm anvÀndaren senare, efter byggandet, kör installationskommandot .\/waf, kommer prefixet att anvÀndas /opt/local.
Team .\/waf clean bör anvÀndas innan projektet omkonfigureras om installationen skall göras Waf med ett annat prefix.
SĂ„ledes finns det inget behov av att kalla pĂ„ nsâ3 .\/waf install. För de flesta anvĂ€ndare kommer det hĂ€r kommandot att vara onödigt, eftersom Waf kommer att plocka de aktuella biblioteken frĂ„n byggkatalogen, men vissa anvĂ€ndare kan tycka att det Ă€r anvĂ€ndbart om deras verksamhet involverar arbete med program utanför nsâ3 katalogen.
Waf Àr enhetlig
I toppnivĂ„n av nsâ3:s kĂ€llkodstrĂ€d finns det bara ett Waf-skript. NĂ€r du har börjat arbeta kommer du att spendera mycket tid i katalogen scratch\/ eller djupare, isrc\/... och du kommer att behöva köra Waf. Du kan helt enkelt komma ihĂ„g var du Ă€r och köra Waf pĂ„ följande sĂ€tt:
$ ..\/..\/..\/waf ...men det kommer att vara tröttsamt och utsatt för fel, sĂ„ det finns bĂ€ttre lösningar. Ett vanligt sĂ€tt Ă€r att anvĂ€nda en textredigerare, som emacs eller vim, dĂ€r tvĂ„ terminalsessioner öppnas, en för att bygga nsâ3 och den andra för att redigera kĂ€llkoden. Om du bara har tarball, sĂ„ kan en miljövariabel hjĂ€lpa:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && .\/waf $* ; }
$ cd scratch
$ waff buildI modulens katalog kan det se frestande ut att lÀgga till ett trivialt waf-skript som exempel exec ..\/..\/waf. VÀnligen gör inte detta. Det förvirrar nybörjare och kan leda till svÄrupptÀckta byggfel om det görs dÄligt. Lösningarna som visas ovan Àr vÀgen att följa.
3.5 Testa ns-3
Du kan köra modultester av nsâ3-distributionen genom att köra skriptet .\/test.py:
$ .\/test.pyDessa tester körs parallellt med Waf. I slutÀndan ska du se ett meddelande om att
92 av 92 tester passerade (92 passerade, 0 misslyckades, 0 kraschade, 0 valgrind-fel)Detta Àr ett viktigt meddelande för att identifiera fel, kraschningar eller valgrind-fel, och indikerar problem med koden eller inkompatibilitet mellan verktyg och kod.
Du kommer ocksÄ att se slutlig utdata frÄn Waf och testaren som kör varje test, vilket kommer att se ut ungefÀr sÄ hÀr:
Waf: GÄr in i katalogen `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
Waf: LĂ€mnar katalogen `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
'built' avslutad framgÄngsrikt (1.799s)
Byggda moduler:
aodv applikationer bro
click config-store kÀrna
csma csma-layout dsdv
emu energi flow-monitor
internet lte mesh
mobility mpi netanim
nÀtverk nix-vector-routing ns3tcp
ns3wifi olsr openflow
punkt-till-punkt punkt-till-punkt-layout propagation
spektrum stats tap-bridge
mall test verktyg
topologi-lÀsa uan virtuell-nÀtdel
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite objekt
PASS: TestSuite slump-numer-generatorer
92 av 92 tester passerade (92 passerade, 0 misslyckades, 0 kraschade, 0 valgrind-fel)
Detta kommando körs vanligtvis av anvĂ€ndare för att snabbt kontrollera att nsâ3-distributionens byggnad Ă€r korrekt. (Observera att ordningen pĂ„ raderna "PASS: ..." kan variera, detta Ă€r normalt. Viktigt Ă€r att den slutgiltiga raden i slutet av rapporten visar att alla kontroller passerade; ingen test misslyckades eller kraschade.) Och Waf, och test.py kommer att parallellisera arbetet över de tillgĂ€ngliga kĂ€rnorna i maskinens processor.
3.6 Köra skript
Vanligtvis kör vi skript under kontroll av Waf. Detta gör att byggsystemet kan garantera att vĂ€gar till gemensamma bibliotek Ă€r korrekt instĂ€llda och att biblioteken finns tillgĂ€ngliga under körning. För att köra programmet, anvĂ€nd bara Waf med parametern -âŻ-run. Vi kommer att köra motsvarigheten till den allestĂ€des nĂ€rvarande programmet för nsâ3 hej vĂ€rlden, genom att skriva in följande:
$ .\/waf --run hello-simulatorWaf kommer först att kontrollera att programmet Àr korrekt sammanstÀllt och kommer att utföra sammanstÀllningen vid behov. Sedan Waf kommer det att köra programmet som ger följande utdata.
Hello SimulatorGrattis! Du Àr nu anvÀndare av ns-3!
Vad ska jag göra om jag inte ser resultatet?
Om du ser meddelanden Waf, som indikerar att sammanstĂ€llningen lyckades, men du inte ser utdata «Hello Simulator», finns det en möjlighet att du i avsnittet [SammanstĂ€llning-s-Waf] har bytt din sammanstĂ€llningslĂ€ge till optimized, men missade att Ă„tergĂ„ till lĂ€get debug. All utdata frĂ„n konsolen som anvĂ€nds i denna handledning anvĂ€nder en speciell komponent ns-3 som loggar och anvĂ€nds för att skriva ut anvĂ€ndarmeddelanden i konsolen. Utdata frĂ„n denna komponent Ă€r automatiskt avstĂ€ngt nĂ€r den optimerade koden kompileras â den Ă€r "optimerad". Om du inte ser utdata "Hello Simulator", skriv följande:
$ .\/waf configure --build-profile=debug --enable-examples --enable-testsför att konfigurera Waf för en sammanstÀllning av debugversioner av ns-3-program som inkluderar exempel och tester. Du bör sedan Äterkompilera den aktuella debugversionen av koden genom att skriva
$ .\/wafNu, om du kör programmet hello-simulator, bör du se det förvÀntade resultatet.
3.6.1 Kommandoradsargument
För att skicka kommandoradsargument till ns-3-programmet, anvÀnd följande mall:
$ .\/waf --run --command-template="%s "ErsĂ€tt med namnet pĂ„ ditt program och med argumenten. Argumentet -âŻ-command-template för Waf Ă€r i sjĂ€lva verket ett recept för att bygga den faktiska kommandoraden Waf som anvĂ€nds för att köra programmet. Waf kontrollerar att sammanstĂ€llningen Ă€r klar, stĂ€ller in sökvĂ€gar till det gemensamma biblioteket, och sedan, med hjĂ€lp av den angivna kommandoradsmallen och placerar programmets namn istĂ€llet för platsinnehavaren %s, anropar det körbar fil. Om du tycker att detta syntax verkar komplicerat, finns det ett enklare alternativ som inkluderar ns-3-programmet och dess argument inneslutna i enkla citattecken:
$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'Ett annat, sÀrskilt anvÀndbart, exempel Àr att selektivt köra testuppsÀttningar. Anta att det finns en testuppsÀttning (suite) mytest (som inte egentligen finns). Tidigare anvÀnde vi skriptet .\/test.py för att parallellt köra en hel uppsÀttning tester, vilket flera gÄnger anropar testprogrammet test-runner. Anrop test-runner direkt för att köra ett test:
$ .\/waf --run test-runner --command-template="%s --suite=mytest --verbose"Argumenten kommer att skickas till programmet test-runner. Eftersom mytest inte finns, kommer ett felmeddelande att genereras. För att skriva ut tillgÀngliga parametrar för test-runner, skriv:
$ .\/waf --run test-runner --command-template="%s --help"3.6.2 Felsökning
För att starta ns-3 program under kontroll av ett annat verktyg, som en debugger (till exempel, gdb) eller minneskontrollverktyg (till exempel, valgrind), anvĂ€nd en liknande form -âŻ-command-template = "âŠ". Till exempel för att starta debuggern gdb ditt ns-3-program hello-simulator med argument:
$ .\/waf --run=hello-simulator --command-template="gdb %s --args "Observera att namnet pĂ„ ns-3-programmet följs av argumentet -âŻ-run, och kontrollverktyget (hĂ€r gdb) Ă€r den första token i argumentet -âŻ-command-template. Alternativet -âŻ-args rapporterar gdb, vilket innebĂ€r att resten av kommandoraden tillhör det "lĂ€gre" programmet. (Vissa versioner gdb förstĂ„r inte alternativet -âŻ-args. I sĂ„ fall ta bort programmets argument frĂ„n -âŻ-command-template och anvĂ€nd kommandosatsen gdb args.) Vi kan kombinera detta recept och det föregĂ„ende för att köra testet under en debugger:
$ .\/waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Arbetskatalog
Waf mĂ„ste köras frĂ„n sin plats högst upp i ns-3-trĂ€det. Denna mapp blir arbetskatalogen dĂ€r utdatafilerna kommer att sparas. Men vad hĂ€nder om du vill spara dessa filer utanför kĂ€llkodstrĂ€det för ns-3? AnvĂ€nd argumentet -âŻ-cwd:
$ .\/waf --cwd=...Det kan vara bekvÀmare för dig att fÄ utdatafilerna i din arbetskatalog. I sÄ fall kan en sÄdan indirekt ÄtgÀrd hjÀlpa:
$ function waff {
CWD="$PWD"
cd $NS3DIR >\/dev\/null
.\/waf --cwd="$CWD" $*
cd - >\/dev\/null
}Denna dekoration av den tidigare kommandot bevarar nuvarande arbetskatalog, gĂ„r till katalogen Waf, och instruerar Waf att Ă„terstĂ€lla arbetskatalogen till den som sparades innan programmet startades. Vi nĂ€mner kommandot -âŻ-cwd för fullstĂ€ndighetens skull, de flesta anvĂ€ndare kör helt enkelt Waf frĂ„n översta nivĂ„n och genererar dĂ€r utdatafiler.
KĂ€lla: habr.com
