Closed ungvilde closed 1 year ago
Hei @ungvilde!
Jeg har ingen M1 Mac å teste på, men ser kanskje ut som du har møtt på dette problemet: https://stackoverflow.com/questions/70248994/installing-armadillo-on-macos-with-homebrew
Basert på svaret på StackOverflow, forsøk å kjøre følgende kommando:
CPATH=/opt/homebrew/include LIBRARY_PATH=/opt/homebrew/lib g++ test.cpp -std=c++11 -larmadillo
Si i fra om det fungerer eller ikke. Hvis det fungerer så skal jeg legge til noen kommentarer på nettsiden basert på dette, samt denne https://apple.stackexchange.com/questions/414622/installing-a-c-c-library-with-homebrew-on-m1-macs som også diskuterer dette at g++ ikke finner mappene der homebrew installerer programmer.
Tusen takk @anderkve, det fungerer!
Men jeg har et par oppfølgingsspørsmål, hvis du har tid:
Tusen takk @anderkve, det fungerer!
Så bra!
Er det mulig å ordne slik ar det ikke er nødvendig å oppgi paths hver gang, så linjen ikke blir så lang?
Jepp, det er mulig. Det er det som diskuteres i den andre linken jeg nevnte, https://apple.stackexchange.com/questions/414622/installing-a-c-c-library-with-homebrew-on-m1-macs Jeg skal skrive en liten oppskrift på det på nettsiden når jeg får tid.
Er det nødvendig å spesifisere standard std=c++11? Eller kan jeg ordne så jeg slipper å skrive det? (Prøvde å fjerne den delen av linjen men fikk feilmelding)
Ja, det er nødvendig å inkludere -std=c++11. (Eneste unntak er om du skulle ha en versjon av g++ eller clang der -std=c++11 er aktivert automatisk, men det virker ikke slik i ditt tilfelle.)
Generelt vil kompilering- og linkekommandoer bli veldig lange når man jobber med mer avanserte prosjekter. Derfor er det vanlig å bruke det vi kaller "Makefiles", som i praksis er små script som konstruerer de lange kommandoene. Til slutt ender man da opp med å bare kjøre en kommando make
heller enn å skrive alle de lange kommandoene direkte. Vi har en kort intro til Makefiles her, i tilfelle du vil se på det alt nå: https://anderkve.github.io/FYS3150/book/using_make/intro.html
Men for relativt små prosjekter, som mye av det vi gjør i dette kurset, pleier jeg bare skrive et kort "shell-skript", altså et lite skript med terminalkommandoer. I ditt tilfelle kan du f.eks. lage en fil med navn som build.sh
der innholdet i fila bare er den ene kommandoen
CPATH=/opt/homebrew/include LIBRARY_PATH=/opt/homebrew/lib g++ test.cpp -std=c++11 -larmadillo
Da kan du kjøre det skriptet med kommandoen ./build.sh
, heller enn å skrive/lime inn hele kommandoen. Merk at du antakelig må kjøre kommandoen chmod u+x build.sh
før du kan kjøre skriptet ditt for første gang -- se her for mer detaljer: https://anderkve.github.io/FYS3150/book/using_the_terminal/basics.html#run-programs-and-scripts
Når jeg kjører linja så får jeg en a.out-fil. Betyr det at jeg både kompilerer og linker med denne linja?
Jepp, riktig. Om du vil dele opp dette i først kompilering og så linking tror jeg det blir med følgende to kommandoer:
# kompilering
CPATH=/opt/homebrew/include g++ -c test.cpp -std=c++11
# linking
LIBRARY_PATH=/opt/homebrew/lib g++ test.o -larmadillo
Hei!
jeg har fulgt instruksjonene for homebrew-installasjon av armadillo, og jeg har kjørt de ekstra linjene slik som det står i "Additional setup for M1 Mac users". Allikevel får jeg feilmelding når jeg prøver å kompilere:
Jeg kjører
g++ -c test.cpp -larmadillo
Og får