Еще одна возможность - найти область, где отсутствует экосистема linux, и создать небольшое приложение для заполнения пространства. Хорошим примером этого является простота сканирования. Если вы можете создать (а) небольшие приложения, подобные этому, которые улучшают жизнь более широкого сообщества, это долгий путь.
У меня лично есть небольшой игровой проект, нуждающийся в кодах. Если вам интересно: simple-scan .
выполнить в терминале:
gcc -v
g++ -v
Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую желаемую версию GCC.
Вы можете увидеть символическую ссылку:ls -la /usr/bin | grep gcc-4.4
ls -la /usr/bin | grep g++-4.4
[d5 ] Вы можете увидеть символическую ссылку: rm /usr/bin/gcc
rm /usr/bin/g++
ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
ln -s /usr/bin/g++-4.3 /usr/bin/g++
Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: ls -la /usr/bin/ | grep gcc
ls -la /usr/bin/ | grep g++
Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: gcc -v
g++ -v
Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.
Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.
Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете передать версию gcc в переменной среды CC:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Вам может не понадобиться это в команде make (обычно настраивать скрипты), но она не болит.
Изменить:
Предполагается, что вы установили версию сначала, например:
sudo apt install gcc-4.9 g++-4.9
Edit:
[d5 ] И вот один лайнер для тех, кто ленив, просто измените число в конце на нужную вам версию. Он внесет изменения для gcc и / или g ++ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
В этом примере я переключился на 4.9
Нет проверок ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте gcc перед sudo. Для полноты я также предоставляю контрольную строку:
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
Результат проверки должен быть примерно таким:
sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib
Вы можете проверить версию после: [!d13 ]
gcc --version
Полу-подробное объяснение:
ls -la / usr / bin / перечисляет все файлы в / usr / bin | pipe (send) вывод к следующей команде grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду входить в regex здесь, прочитайте, если хотите. xargs просто кладет, он собирает результаты, которые отправляются на него и отправляют все из них до конца. то есть команде, следующей за xargs bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки. ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.Рассмотрите одностороннее обновление:
sudo apt install gcc-7 sudo apt remove gcc-5apt будет обрабатывать ссылки сотрудников автоматически в этом случае. Новая версия C / C ++ довольно совместима. Вам вряд ли понадобится старый.