Kirjoittaja Aihe: [ ratkaistu ] uudempi g++ -versio  (Luettu 3524 kertaa)

teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
[ ratkaistu ] uudempi g++ -versio
« : 14.11.16 - klo:10.55 »
Olen onnistunut kääntämään joitain esimerkkiohjelmia Ubuntu 14.04:ssä komennolla

Koodia: [Valitse]
g++ koe.cpp -o koe -Wall -pedantic -std=c++11
mutta netissä sanotaan, että esimerkiksi regex tarvitsee uudemman kääntäjäversion.

Mikä olisi turvallinen tapa saada käyttöön esimerkiksi versio 4.9 tai 5.1 gcc:stä. Ratkeaisiko kysymys päivittämällä koko Ubuntu versioon 16.04 eli onko siinä mukana uudempi kääntäjäversio.



« Viimeksi muokattu: 14.11.16 - klo:13.52 kirjoittanut teele »

juyli

  • Vieras
Vs: uudempi g++ -versio
« Vastaus #1 : 14.11.16 - klo:11.07 »
... turvallinen tapa saada käyttöön esimerkiksi versio 4.9 tai 5.1 gcc:stä. Ratkeaisiko kysymys päivittämällä koko Ubuntu versioon 16.04 eli onko siinä mukana uudempi kääntäjäversio.
Xenial 16.04:ään on tarjolla ainakin gcc-versioita niin 4.9 kuin 5.x.
http://packages.ubuntu.com/search?keywords=gcc&searchon=names&suite=xenial&section=all
Mutta mielestäni Trusty 14.04:n löytyy gcc-4.9. ?


teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #2 : 14.11.16 - klo:11.28 »

gcc-4.9 näyttää kyllä asentuvan, mutta se ei kuitenkaan suostu kääntämään. Alla näkyy, että jotain hakemistorakenteissa on pielessä.


Koodia: [Valitse]
sudo apt-get install gcc-4.9

Koodia: [Valitse]

gcc-4.9 regex01.cpp -o regex01 -Wall -pedantic -std=c++11
gcc-4.9: error trying to exec 'cc1plus': execvp: Tiedostoa tai hakemistoa ei ole

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #3 : 14.11.16 - klo:11.35 »
14.04:ään saa GCC 4.9:n ubuntu-toolchain-r-PPA:sta: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test

Voit myös käyttää virallisesta trusty-updates-repositoriosta saatavaa Clang 3.8 -kääntäjää, joka tukee C++11-standardia täydellisesti. Toki uusimmissa versioissa on aina korjattu ja parannettu asioita.

GCC:n ja LLVM/Clang -kääntäjien suorituskykyvertailuja on julkaistu Phoronixissa. Tässä uusin:
http://www.phoronix.com/scan.php?page=article&item=gcc-61-clang39


gcc-4.9 näyttää kyllä asentuvan, mutta se ei kuitenkaan suostu kääntämään. Alla näkyy, että jotain hakemistorakenteissa on pielessä.


Koodia: [Valitse]
sudo apt-get install gcc-4.9

Koodia: [Valitse]

gcc-4.9 regex01.cpp -o regex01 -Wall -pedantic -std=c++11
gcc-4.9: error trying to exec 'cc1plus': execvp: Tiedostoa tai hakemistoa ei ole

C++-tukea varten tarvitset lisäksi paketin g++-4.9

Mistä lähteestä tuo on nyt asentunut?

Koodia: [Valitse]
apt-cache policy gcc-4.9

teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #4 : 14.11.16 - klo:11.50 »

näyttää olevan asentunut täältä
Koodia: [Valitse]
apt-cache policy gcc-4.9
gcc-4.9-base:
  Asennettu: 4.9.3-0ubuntu4
  Ehdokas:   4.9.3-0ubuntu4
  Versiotaulukko:
 *** 4.9.3-0ubuntu4 0
        500 http://fi.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     4.9-20140406-0ubuntu1 0
        500 http://fi.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
le1@l1:~/bi/rex$


ja sitten on vielä tämä, pitäisikö vielä nyt lisätä niitä pakettivarastoja

Koodia: [Valitse]
sudo apt-get install g++-4.9
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis       
E: Pakettia g++-4.9 ei löydy
E: Couldn't find any package by regex 'g++-4.9'




teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #5 : 14.11.16 - klo:12.12 »
 tässä on vielä koe-ohjelma, jota yritän kääntää, voihan siinäkin olla virhe, mutta se on suoraan netin oppaasta ja menee läpi täällä   https://regex101.com/

Koodia: [Valitse]

 #include <iostream>
 #include <regex>
 #include <string>
 
 using namespace std;
 
 int main()
 {
  string input;
  regex integer("(\\+|-)?[[:digit:]]+");
  //As long as the input is correct ask for another number
  while(true)
  {
  cout<<"Give me an integer!"<<endl;
  cin>>input;
  if(!cin) break;
  //Exit when the user inputs q
  if(input=="q")
  break;
  if(regex_match(input,integer))
  cout<<"integer"<<endl;
  else
  {
  cout<<"Invalid input"<<endl;
  }
}
 }


koneessa olevat kääntäjät ovat
Koodia: [Valitse]
which gcc-
gcc-4.8         gcc-ar-4.8      gcc-nm-4.8      gcc-ranlib-4.8
gcc-4.9         gcc-ar-4.9      gcc-nm-4.9      gcc-ranlib-4.9
gcc-ar          gcc-nm          gcc-ranlib


komento
Koodia: [Valitse]
gcc-4.9 regex01.cpp -o regex01 -Wall -pedantic -std=c++11

tulostaa ruutukaupalla virheilmoituksia, mutta g++ -komento kääntää mukisematta, ja vasta käännetty ohjelma kaatuu.


« Viimeksi muokattu: 14.11.16 - klo:12.28 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #6 : 14.11.16 - klo:12.14 »
Juu, 14.04:n pakettilähteissä ei ole GCC 4.9 C/C++-kääntäjää vaan ainoastaan gcc-4.9-base -paketti gccgo 4.9:ää varten.

Mahdolliset ratkaisuvaihtoehdot 16.04-päivityksen lisäksi ovat yllä mainitsemani.

Lisäys: Clang-kääntäjän ja libc++:n asennus:

Koodia: [Valitse]
sudo apt-get install clang-3.8 libc++1 libc++-dev
Kääntäminen toimii samalla tavalla kuin g++:lla, mutta tarvitset parametrin -stdlib=libc++, jotta libstdc++:n sijaan käytetään LLVM-projektin libc++:aa, jossa on tuki regex-syntaksille. Tämän myötä käännetty binääri on riippuvainen libc++:sta, eli Ubuntun tapauksessa suorittamiseen tarvitaan paketti libc++1.

Koodia: [Valitse]
clang++-3.8 regex01.cpp -o regex01 -Wall -pedantic -std=c++11 -stdlib=libc++
Koodia: [Valitse]
./regex01
Lainaus
Give me an integer!
13
integer
Give me an integer!
13.4
Invalid input
Give me an integer!
sdf
Invalid input
« Viimeksi muokattu: 14.11.16 - klo:12.55 kirjoittanut nm »

teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
Vs: uudempi g++ -versio
« Vastaus #7 : 14.11.16 - klo:13.51 »

Kiitos ohjeista  :)

Näillä taitaa onnistua

Koodia: [Valitse]

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update


sudo apt-get install gcc-4.9
sudo apt-get install g++-4.9

g++-4.9 koe.cpp -o koe -Wall -pedantic -std=c++11