Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 14.11.16 - klo:10.55
-
Olen onnistunut kääntämään joitain esimerkkiohjelmia Ubuntu 14.04:ssä komennolla
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.
-
... 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§ion=all
Mutta mielestäni Trusty 14.04:n löytyy gcc-4.9. ?
-
gcc-4.9 näyttää kyllä asentuvan, mutta se ei kuitenkaan suostu kääntämään. Alla näkyy, että jotain hakemistorakenteissa on pielessä.
sudo apt-get install gcc-4.9
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
-
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ä.
sudo apt-get install gcc-4.9
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?
apt-cache policy gcc-4.9
-
näyttää olevan asentunut täältä
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
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'
-
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/
#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
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
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.
-
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:
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.
clang++-3.8 regex01.cpp -o regex01 -Wall -pedantic -std=c++11 -stdlib=libc++
./regex01
Give me an integer!
13
integer
Give me an integer!
13.4
Invalid input
Give me an integer!
sdf
Invalid input
-
Kiitos ohjeista :)
Näillä taitaa onnistua
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