Инструменты пользователя

Инструменты сайта



// MinGW GCC 5 в Trusty

Сделал PPA, куда положил MinGW GCC 5: https://launchpad.net/~adrozdoff/+archive/ubuntu/mingw

Версия GCC на момент написания поста: 5.3.0. Сборка зависит от репозитория https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages (если надумаете собирать сами).

Краткие характеристики сборки:

  • Модель потоков: только posix (требуется libwinpthreads), т.к. позволяет использовать все возможности C++11/C++14. Если будет спрос на win32, то нужно только добавить одну строчку и чуть подкорректировать альтернативы (т.е. сборка поддерживает, просто выключил win32).
  • Обработка исключений: sjlj для win32 и seh для win64
  • Сборка для Win32 и Win64

Добавление репозитория:

  sudo apt-add-repository ppa:adrozdoff/mingw

Установка:

  sudo apt-get install gcc-5-mingw-w64 g++-5-mingw-w64

Компилятор с суффиксом -5, что бы не конфликтовать с тем, что распространяется вместе с Ubuntu/Mint.

В этом же репозитории планирую выкладывать сборки библиотек.

// Выбор дефолтного компилятора в Ubuntu/Mint/Debian

Создать альтернативы:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 99
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5   20
 
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 99
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5   20
 
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 99
sudo update-alternatives --set cc /usr/bin/gcc
 
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 99
sudo update-alternatives --set c++ /usr/bin/g++

После чего можно переключаться вручную через меню:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

или скриптом:

sudo update-alternatives --set gcc /usr/bin/gcc-5
sudo update-alternatives --set g++ /usr/bin/g++-5

или вернуть в автоматический режим:

sudo update-alternatives --auto gcc
sudo update-alternatives --auto g++

Снести альтернативы:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Или только указанную:

sudo update-alternatives --remove gcc /usr/bin/gcc-4.9
sudo update-alternatives --remove g++ /usr/bin/g++-4.9

В последнем случае, подберётся другая альтернатива (на основе приоритета) и выбор будет выставлен в auto. Если альтернатив нет, то будут почищены все симлинки.

На основе: http://askubuntu.com/questions/26498/choose-gcc-and-g-version

// Qt5, OpenGL и Ubuntu/Mint

Временами, при сборке ловится такое:

/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status

При этом в системе наблюдается такое:

$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/insync/libGL.so.1
/usr/lib/nvidia-346-updates/libGL.so
/usr/lib/nvidia-346-updates/libGL.so.1
/usr/lib/nvidia-346-updates/libGL.so.346.82
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/primus/libGL.so.1
/usr/lib32/nvidia-346-updates/libGL.so
/usr/lib32/nvidia-346-updates/libGL.so.1
/usr/lib32/nvidia-346-updates/libGL.so.346.82

Т.е. вроде всё есть, но чего-то не хватает. А не хватает того, что они живут в директориях, которые не видны линковщику. Для рантайма средство есть через aternatives:

x86_64-linux-gnu_gl_conf
x86_64-linux-gnu_egl_conf

Для девелопмента должен стоять пакет libgl1-mesa-dev. После его установки станет так:

$ ls -l /usr/lib/x86_64-linux-gnu/libGL.so
lrwxrwxrwx 1 root root 13 марта 12 08:47 /usr/lib/x86_64-linux-gnu/libGL.so -> mesa/libGL.so

Проблема в том, что пакет стоит, а файла нет… Скорее всего были какие-то нюансы при обновлении или ещё чего. Лечится:

sudo apt-get install --reinstall libgl1-mesa-dev

// Обновлённый графический стек в Ubuntu/Mint

Собственно, не только стек, но и ядро 3.19

Основная ссылка: http://www.opennet.ru/opennews/art.shtml?num=42744

Команда для обновления:

sudo apt-get install --install-recommends linux-generic-lts-vivid xserver-xorg-core-lts-vivid xserver-xorg-lts-vivid xserver-xorg-video-all-lts-vivid xserver-xorg-input-all-lts-vivid libwayland-egl1-mesa-lts-vivid

Стоит отметить, что при наличии PPA xorg-edgers у вас не получится обновиться: нужно сначала вычистить этот PPA и все установленные из него пакеты заменить на дистрибутивные. Но воспользоваться для этого ppa-purge не получится: удивитесь количеству конфликтов.

Я делал вручную по следующему алгоритму…

ВНИМАНИЕ!!! СЛЕДУЙТЕ ДАННЫМ ИНСТРУКЦИЯМ ТОЛЬКО В СЛУЧАЕ, ЕСЛИ ВЫ РЕАЛЬНО ПОНИМАЕТЕ, ЧТО ДЕЛАЕТЕ. УБИТЬ СИСТЕМУ ТАК ПРОЩЕ ПРОСТОГО.

Перво-наперво: выполняйте команды из чистой консоли, а не из терминала. Если вы не понимаете о чём речь, лучше тут и остановиться.

Далее, для простоты на x86_64 системах стоит удалить i386 пакеты - они ставились, например, при установке Skype, TeamViewer или Wine. Соответсвенно, сами программы тоже снесутся. На всякий случай стоит сохранить список:

dpkg -l | grep :i386 | awk '{print $2}' > i386_list.txt

После чего нужно их удалить:

dpkg -l | grep :i386 | awk '{print $2}' | xargs sudo apt-get remove

Нет стоит использовать purge на этой стадии.

Затем нужно удалить в настройках apt репозиторий xorg-edgers и обновить список пакетов:

sudo apt-get update

После, нужно заменить все пакеты в названии которых (точнее версии) содержатся слова xedgers ,sarvatt и ricotz, а так же пакеты:

  • ppa-purge
  • wayland
  • i915

которые содержатся в данном репозитории, но не соответствует правилам вышеприведённым правилам именования, на пакеты из основного репозитория.

Сделать этом можно в два этапа. Сначала удаляем пакеты игнорируя все зависимости:

dpkg -l | grep 'xedgers\|sarvatt\|ricotz' | awk '{print $2}' | xargs sudo dpkg -r --force-depends ppa-purge wayland i915

Затем восстановить поломанные зависимости:

sudo apt-get install -f

Поставятся уже дистрибутивные пакеты.

После этого можно восстановить i386 пакеты и доставить пакеты ppa-purge, i915, если необходимо.

После данных действий, можно будет обновить стек xorg.

// Пакетирование отладочной информации в deb

Всё достаточно просто. В control добавляем описание нового пакета, вроде:

Package: ffmpeg-real-dbg
Section: libdevel
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: debug symbols for ffmpeg libraries
 This package contains the debug symbols for FFmpeg lubraries.
 .
 This is the real ffmpeg. The libraries are installed to the /opt/ffmpeg/lib.

А в rules что-то вроде:

override_dh_strip:
       dh_strip --dbg-package=ffmpeg-real-dbg

Главное, что бы имя пакета соответствовало. Естественно, при сборке нужно обеспечить что бы при компиляции отладочная информация вообще создавась. В случае real-ffmpeg от samrog131 нужно добавить

--enable-debug=3

к ./configure

Подробнее: http://askubuntu.com/questions/182703/how-and-why-to-create-dbg-dev-doc-packages

// Nvidia Optimus

Дошли руки до включения данной фичи на моём ноутбуке. Всё оказалось не просто, а очень просто, в случае Linux Mint 16, всё делаем по инструкции: http://help.ubuntu.ru/wiki/bumblebee для Linux Mint 16 смотрим на версии убунты 13.10, для будущего Linux Mint 17 - 14.04.

За более детальными настройками: https://wiki.archlinux.org/index.php/Bumblebee_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29

Если коротко:

  1. Включаем в биосе Nvidia Optimus, у меня стоит предупреждение, что тема только для Windows 7 и 8, тупо игнорим
  2. После перезагрузке в выводе
    lspci -nn | grep VGA

    наблюдаем две строки, а не одну, как обычно.

  3. Ставим дрова nvidia (проприетарные):
    sudo apt-get install nvidia-319-updates nvidia-settings-319-updates
  4. Ставим бамблбее:
    sudo apt-get install bumblebee bumblebee-nvidia primus primus-libs-ia32
  5. Ребутимся (а может и не нужно, но у меня на этом шаге Optimus был выключен в биосе, так что один фиг нужно было включить, но перелогиниться нужно точно, так как текущий пользователь был включён в группу bumblebee, что бы иметь возможность вызывать optirun).
  6. Профит!

После загрузки смотрим вывод

optirun --status

видим, что всё ок. А приложения запускаем:

optirun [аргументы] <приложение> [аргументы приложения]

Для самых нетерпеливых, можно сравнить вывод двух команд:

glxinfo
optirun glxinfo

// Infinality в Linux Mint & Ubuntu

Готовый PPA: https://launchpad.net/~no1wantdthisname/+archive/ppa описание там же.

UPD: ломает загрузку минта в графику к чертям собачьим. НЕ ИСПОЛЬЗОВАТЬ

UPD2: мужики нашли workaround: http://forums.linuxmint.com/viewtopic.php?f=208&t=136307. Не пробовал

UPD3: применил решение из UDP2, только поместил в более логичное место: ~/.profile. Система работает. А то смотреть без слёз на рендеринг шрифтов в QtCreator'е было нельзя.

UPD4: Сохраню тут для потомков и собственного удобства:

# move infinality-settings out of system profile
sudo mv /etc/profile.d/infinality-settings.sh /etc/infinality-settings.sh
 
# make execute by everyone
sudo chmod a+rx /etc/infinality-settings.sh

а уже вызов /etc/infinality-settings.sh добавить в ~/.profile

Хотя в той же теме на форуме, сказано, что исправлено в mdm (его вообще мог зафейлить любой косяк в /etc/profile.d/*): https://github.com/linuxmint/mdm/commit/ee1a28b3c295c283aa94b890658d78be25e31bb7 и доступно всё это в Mint 17.2 'Rafaela'. Альтернативной апдейту: отредактировать /etc/init/mdm.conf согласно патчу.