Véletlenül nem tudja valaki, hogyan kell váltani Archon (Manjaron) clang és gcc között? Ubuntun ugye ott volna az update-alternatives, de Arch-on nincs ilyen.
Előre köszönöm.
- 1157 megtekintés
Hozzászólások
Szia,
Nem tudok róla hogy bármilyen rendszer szintű beállítás lenne ami fixen vált gcc és clang között.
A helyedben a CC (c fordító) CXX (c++ fordító) CPP (c preprocesszor) LD (linker) környezeti változók környékén kezdeném a kotorászást.
Ha arch csomagokat fordítassz (pl AUR-ból) akkor a makepkg.conf -ban lehet ezeket megadni, ha bármi mást akkor build rendszer függő lehet a dolog de a legtöbb esetben a fenti környezeti változókkal megadható hogy mit használjanak..
- A hozzászóláshoz be kell jelentkezni
Itt leírják: https://wiki.archlinux.org/index.php/Clang
- A hozzászóláshoz be kell jelentkezni
Hát ez lehet, hogy jó Arch/Manjaro csomagok fordítására, de nekem független programokat kellene clang-gal fordítanom. Tehát arra volna szükség, hogy a
c++ hello.cpp
lefordítsa a hello.cpp-t clang-gal. Ubuntun ez úgy megy, hogy az update-alternatives utility elintézi, hogy a c++ (symlink) a clang++-ra vagy a g++-ra mutasson.
Ezeknek a linkeknek az átállítása nem triviális, mivel a clang csomagból többszáz fájl jön, és még a /bin-be is több tucat fájl kerül, úgyhogy nem világos, hogy miket kéne átlinkelni.
- A hozzászóláshoz be kell jelentkezni
make CXX=clang++ all
- A hozzászóláshoz be kell jelentkezni
Az export CC=clang és az export CXX=clang++ felvétele a környezeti változókhoz gondolom ezt teszi, csak ne a makepkg.conf-ba, hanem mondjuk a /etc/environments-be vedd fel.
- A hozzászóláshoz be kell jelentkezni
Jó, nézzük tehát:
export CXX=clang++
c++ -v
Kiírja:
Using built-in specs.
COLLECT_GCC=c++
...sok részlet
...sok részlet
gcc version 8.2.1 20180831 (GCC)
Tehát nem nyert.
--
ulysses.co.hu
- A hozzászóláshoz be kell jelentkezni
Bocs, tévedtem abban, hogy az átlinkelések nem triviálisak.
A következőképpen találtam meg a megoldást: Összevetettem Ubuntun a /etc/alternatives tartalmát két állapotban
1) amikor c++ a gcc-re volt állítva
2) és amikor c++ a clang-ra volt állítva
ahol az átállítás az Ubuntu/Debian hivatalos update-alternatives programjával történt.
Azt találtam, hogy az egyetlen eltérés, hogy a c++ symlink a g++-ra vagy a clang++-ra mutat. Tehát csak annyit kell tenni, hogy a a c++ helyett (ami manjaron hardlinkje a g++-nak) csinalni kell egy symlinket a clang++-ra.
- A hozzászóláshoz be kell jelentkezni
Ezt megteheted de tartok tőle hogy a következő gcc update-nél akkora hátast fog dobni a pacman mint ide lacháza :/
Ahogy fent is írtam a legtöbb build rendszerben környezeti változókkal lehet befolyásolni a használt compilert, de ha nem írsz konkrét SW-t amit fordítani próbálsz úgy nehéz segíteni ;)
- A hozzászóláshoz be kell jelentkezni
A legtöbb build rendszerben talán igen, de itt nem opció a build rendszer átírása. Egyébként a "c++" program csak egy frontend, a Debian/Ubuntuban is és a FreeBSD-ben is kapcsolható, hogy mi legyen mögötte. Az Arch/Manjaroban ez egyszerűen nincs kész.
Hogy dob-e hátast a pacman, arról majd beszámolok.
Furcsa, hogy a clang lassabb a gcc-nél. Egy kb. ezer objectes projektnél ugyanazzal az optimalizálással:
gcc real: 1m50
clang real: 2m8
Nincs jelentősége, csak azért írom, mert éppen azzal ment a kampány a clang javára, hogy az gyorsabb. De nem.
- A hozzászóláshoz be kell jelentkezni
"Hogy dob-e hátast a pacman, arról majd beszámolok."
Most frissült a clang 6.0.1-ről 7.0.0-ra.
A c++ linket természetesen nem az eredeti helyén kell átírni, hanem jobb csinálni egy ~/bin/c++ linket, ami ide vagy oda mutat, plusz a ~/bin-t előre kell venni pathban. Ez minden Linuxban működik, és semmit nem zavar.
--
ulysses.co.hu
- A hozzászóláshoz be kell jelentkezni
Hali,
Nem is a clang miatt aggódtam hanem ha a gcc-t frissíted ami tartalmazza a felülírt c++ fájlt, de persze ha a path-ban előrébb lévő egyéb helyre raksz egy symlinket akkor az megoldás erre a problémára :)
- A hozzászóláshoz be kell jelentkezni
Addig volt csak gyorsabb, amíg kevesebb feature volt benne :) Most már "csak" a jobb diagnosztikai üzenetek és a széleskörű ráépülő tooling miatt érdemes a Clang-et választani.
- A hozzászóláshoz be kell jelentkezni