Последнее обновление:
March 8, 2020

Есть мысль... Жми, напиши!
Что имеем: Постов : 169 Авторов: 1 Категорий: 28

Программирование и отладка STM32F3 Discovery в QtCreator под Ubuntu

Спустя три года опять решил поиграться с STM32F, но уже вплотную.

В этот раз в роли IDE и дебагера будет выступать QtCreator т.к. в новых версиях есть плагинчик для работы с голыми устройствами.

Ось — Ubuntu 16.04, под Windows тут недалеко.

1.  Поставим сам отладчик для STM т.е. gdb сервер

Устанавливаем всё необходимое для сборки:

sudo apt-get install libusb-1.0-0-dev

Надеюсь CMake и GCC уже стоят.

Для этого клонируем репозиторий и собираем ST-Link Utility

cd ~/Projects/ST-Link-Utility
git clone https://github.com/texane/stlink.git .
make release
cd build/Release
sudo make install
sudo ldconfig
sudo udevadm control --reload-rules
sudo  udevadm trigger

Вот впринципе сервер скомпиллен, запускать его для вывода справки:

st-util -h

2. Включаем в QtCreator плагин Help -> About Plugins -> галка напротив BareMetal и перезапускаем QtCreator

3. Дальше необходимо поставить компилятор и отладчик для архитектуры ARM

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

4. Добавляем их в QtCreator

Preferences -> Build & Run -> Compillers -> Add -> GCC

Название на ваше усмотрение, у меня: arm-none-eabi-gcc

Путь прописываем такой: /usr/bin/arm-none-eabi-gcc

Preferences -> Build & Run -> Debuggers -> Add

Название на ваше усмотрение, у меня: arm-none-eabi-gdb 

Путь прописываем такой: /usr/bin/arm-none-eabi-gdb 

5. Создадим устройство, переходим в Preferences ->BareMetal -> Add ST-Link

название на ваше усмотрение, у меня ST-Link-Utility

режим запуска: TCP/IP

исполняемый файл: st-util

хост: localhost, порт: 4242

5.1 Нужно дать отладчику дополнительное время для ожидания подключения:

Options->Debugger->GDB->Additional Startup Commands и прописать

set remotetimeout 10

6. Теперь добавляем комплект сборки:

Preferences -> Build & Run -> Kits -> Add

Название на ваше усмотрение, у меня Qt for Bare Metal

Тип устройства: Bare Metal

Устройство: Нажимаете Manager -> Add -> Bare Metal

Название на ваше усмотрение, у меня ST-Link1

Тип сервера gdb:  ST-Link-Utility (из предыдущего шага)

Компилятор:  как задали в предыдущем шаге, у меня arm-none-eabi-gcc

Отладчик: как задали в предыдущем шаге, у меня arm-none-eabi-gdb

Профиль Qt: отсутствует

7. Так, с подготовкой закончили, создаём новый проект, импортировав его шаблон из Git репозитория File-> New -> Import -> Git.

Репозиторий с шаблоном: https://github.com/Riflio/STM32F3DiscoveryQtCreatorTemplate

Путь выбираете свой.

Смените комплект на Qt for Bare Metal и можно наконец то прожать Run, в окне вывод приложения должно появиться примерно это:

Отладка запущена
st-util 1.2.0-147-g3de5cf0
Flash page at addr: 0x08000000 erased
Flash page at addr: 0x08000800 erased
Flash page at addr: 0x08001000 erased

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

Если вылетает при отладке, либо при её завершении, поставьте в Qt Creator -> Инструменты -> Параметры -> Отладчик -> GDB, расширенные
галку у «Использовать асинхронный режим для работы с программой»
Если будет ошибка «Unknown remote qXfer reply: OK«, то см. пункт 5.1

P.S. Как создавать шаблон под другие контроллеры?
Сделать его достаточно просто, потребуется CMSIS — в ней содержатся описания для доступа к регистрам периферии и STM32F30x_StdPeriph_Driver (в новых версиях переименован в HAL)
Всё это ищется в недрах сайта st.com    ldscripts были найдены в каком-то демо-проекте 😀

Вот как-то так =)

Views :

3247

Ubuntu LTSP fat clients install OPENCHROME drivers

На этот раз достался очередной толстый клиент, но с видяхой VIA VX900, подключил в сеть и опять облом: картинка вся в мыле, не то разрешение и не работает OpenGL, при попытке узнать как он там:

glxinfo

Получаем кучу

Xlib:  extension "GLX" missing on display ":0.0".

Понятно дело, в предыдущий раз были поставлены дрова на Нвидию т.к. остальные клиенты на ней, а теперь зоопарк.

Чтож, добавим в эот зоопарк дрова на VIA VX900, а именно свободные openchrome

Переходим в рут к ltsp, подключаем нужные разделы и ставим дрова:

sudo su
export LTSP_HANDLE_DAEMONS=false
chroot /opt/ltsp/i386
mount -t proc proc /proc
apt-get install xserver-xorg-video-openchrome

разумеется нужно в lts.conf указать конкретный драйвер:

[client mac]
   XSERVER=openchrome

Можно попробовать перегрузиться, но по glxinfo опять облом =(

Смотрим /var/log/xorg.0.log, а там

 LoadModule: "glx"
...
Module glx: vendor="NVIDIA corporation"

Походу, что-то не оттуда грузиться, поэтому сделаем свой xorg.conf.openchrome, который укажем в настройках lts.conf и засунем в него портянку (взял из гугла), где в секции FIles укажем дефолтные пути загрузки:

nano /etc/X11/xorg.conf.openchrome
xorg.conf.openchrome
Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          "Default Screen"
#       Option          "RandR"  "false"
        InputDevice     "Mouse"
        InputDevice     "Keyboard"
EndSection

Section "InputDevice"
	Identifier	"Keyboard"
	Driver		"kbd"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"cn"
EndSection

Section "InputDevice"
        Identifier      "Mouse"
        Driver          "mouse"
        Option          "CorePointer"
EndSection

Section "Files"
	#RgbPath      "/usr/local/share/X11/rgb"
	ModulePath   "/usr/lib/xorg/modules"
	#FontPath     "/usr/share/fonts/X11/misc/"
	#FontPath     "/usr/share/fonts/X11/TTF/"
	#FontPath     "/usr/share/fonts/X11/OTF"
	#FontPath     "/usr/share/fonts/X11/Type1/"
	#FontPath     "/usr/share/fonts/X11/100dpi/"
	#FontPath     "/usr/share/fonts/X11/75dpi/"
EndSection


Section "Monitor"
	Identifier	"VGA-1"
     	#Option		"Ignore"	    "true"
        #Option         "NoDDCValue"        "false"
     	#Option		"Disable"	    "true"
     	Option		"Enable"	    "true"
        #Option		"Rotate"            "right"
     	#Modeline 	"1024x768_60.00"    63.50  1024 1072 1176 1328  768 771 775 798 -hsync +vsync
     	#Option		"PreferredMode"	    "1024x768"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
	Identifier	"LVDS-1"
	Option	 	"Ignore"		"true"
	#Option   	"Enable"		"true"
	#Modeline 	"800x480_60.00"   	29.50  800 824 896 992  480 483 493 500 -hsync +vsync
        #Modeline 	"1024x768_60.00"   	63.50  1024 1072 1176 1328  768 771 775 798 -hsync +vsync
	#Modeline 	"1600x1200_60.00"  	130.25  1600 1648 1680 1760  1200 1203 1207 1235 -hsync +vsync
	#Option   	"PanelSize"		"1360x768"
	#Option	  	"PreferredMode" 	"800x600"
	#Option	  	"MSB"           	"false"
	#Option         "NoDithering"           "true"
	#Option         "DualChannel"           "false"
	#Option         "Center"                "true"
        #Option         "FixOnIGA1"             "true"
	#Option         "ClockPolarity"         "1"
	#Option         "ClockAdjust"
	#Option         "ClockDrivingSelection"
	#Option         "DataDrivingSelection"
	#Option         "Vt1636ClockSelST1"
	#Option		"Vt1636ClockSelST2"
	Option		"DefaultModes"	    "true"
EndSection	

Section "Monitor"
	Identifier	"DVI-1"
	Option		"Ignore"	"true"
        #Option         "Enable"        "true"
        #Option         "NoDDCValue"    "true"
        #Option         "PreferredMode" "1024x768"
        #Option         "ClockPolarity"         "1"
        #Option         "ClockAdjust"
        #Option         "ClockDrivingSelection"
        #Option         "DataDrivingSelection"
	Option		"DefaultModes"	    "true"
EndSection	

Section "Monitor"
	Identifier	"TV-1"
	Option 		"Ignore"   	"true"
	Option		"DefaultModes"	    "true"
EndSection	

Section "Monitor"
        Identifier      "HDMI-1"
        Option          "Ignore"        "true"
        #Option         "Enable"        "true"
	#Option         "AttachAllModes" "true"
	#Option         "DisableAudio"  "True"
        #Option          "PreferredMode" "1280x720P"
        #Option         "ClockPolarity"         "1"
        #Option         "ClockAdjust"
        #Option         "ClockDrivingSelection"
        #Option         "DataDrivingSelection"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
        Identifier      "DisplayPort-1"
        Option          "Ignore"        "true"
        #Option         "Enable"        "true"
        #Option         "NoDDCValue"    "true"
        #Option         "Swlinktraining"    "true"
        #Option         "PreferredMode" "1024x768"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
        Identifier      "VGA-2"
        Option         "Ignore"            "true"
        #Option         "NoDDCValue"        "false"
        #Option         "Disable"           "true"
        #Option         "Enable"            "true"
        #Option         "Rotate"            "right"
        #Modeline       "1024x768_60.00"    63.50  1024 1072 1176 1328  768 771 775 798 -hsync +vsync
        #Option          "PreferredMode"     "1024x768"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
        Identifier      "LVDS-2"
        Option          "Ignore"                "true"
        #Option         "Enable"                "true"
        #Modeline       "800x480_60.00"         29.50  800 824 896 992  480 483 493 500 -hsync +vsync
        #Modeline       "1024x768_60.00"        63.50  1024 1072 1176 1328  768 771 775 798 -hsync +vsync
        #Modeline       "1600x1200_60.00"       130.25  1600 1648 1680 1760  1200 1203 1207 1235 -hsync +vsync
        #Option         "PanelSize"             "1024x768"
        #Option         "PreferredMode"         "1024x768"
        #Option         "MSB"                   "false"
        #Option         "NoDithering"           "true"
        #Option         "DualChannel"           "false"
        #Option         "Center"                "true"
        #Option         "FixOnIGA1"             "true"
	#Option         "Vt1636ClockSelST1"
        #Option         "Vt1636ClockSelST2"
	Option		"DefaultModes"	    	"true"
EndSection

Section "Monitor"
        Identifier      "DVI-2"
        Option          "Ignore"        "true"
        #Option         "Enable"        "true"
        #Option         "NoDDCValue"    "true"
        #Option         "PreferredMode" "1024x768"
        #Option         "ClockPolarity"         "1"
        #Option         "ClockAdjust"
        #Option         "ClockDrivingSelection"
        #Option         "DataDrivingSelection"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
        Identifier      "TV-2"
        Option          "Ignore"        "true"
	Option		"DefaultModes"	"true"
EndSection

Section "Monitor"
        Identifier      "HDMI-2"
        Option          "Ignore"        "true"
        #Option         "Enable"        "true"
        #Option         "AttachAllModes" "false"
        #Option         "DisableAudio"  "True"
        #Option         "PreferredMode" "1280x720P"
        #Option         "ClockPolarity"         "1"
        #Option         "ClockAdjust"
        #Option         "ClockDrivingSelection"
        #Option         "DataDrivingSelection"
	Option		"DefaultModes"	    "true"
EndSection

Section "Monitor"
        Identifier      "DisplayPort-2"
        Option          "Ignore"        "true"
        #Option         "Enable"        "true"
        #Option         "NoDDCValue"    "true"
        #Option         "Swlinktraining"    "true"
        #Option         "PreferredMode" "1024x768"
	Option		"DefaultModes"	    "true"
EndSection

Section "Device"
	Driver 		"openchrome"
	VendorName  	"VIA Tech"
	BoardName   	"via"
	Identifier	"Configured Video Device"
EndSection

Section "Screen"
	DefaultDepth 24
	SubSection "Display"
	#	Virtual 4000 4000
		Depth  24
	EndSubSection
	Identifier	"Default Screen"
	Device		"Configured Video Device"
EndSection

Section "Module"
	Load  "glx"
	Load  "dri"
	Load  "extmod"
EndSection

Section "DRI"
	Group 0
	Mode 0666
EndSection
Section "Extensions"
	Option	"Composite"			"Enable"
EndSection

и пропишем в lts.conf его явно:

[client mac] 
X_CONF=/etc/X11/xorg.conf.openchrome

Можно пробовать перезагрузиться, разрешение должно прийти в норму, а вот с glxinfo опять облом, опять же смотрим xorg.0.log

AIGLX error: dlopen of /usr/lib/xorg/modules/drivers/i965_dri.so failed (/usr/lib/xorg/modules/drivers/i965_dri.so: undefined symbol: _glapi_set_dispatch)

Вот падла, что-то опять не оттуда загрузил, проверяем откуда libglx.so берёт зависимости:

ldd /usr/lib/xorg/modules/extensions/libglx.so

а там

libGL.so.1 => /usr/lib/nvidia-340/libGL.so.1

Бля, тащит libGL от Нвидии. Ладно, значит Нвидиа подсунула в ld свои настройки, идём в /etc/ld.so.conf.d смотрим в *.conf файлах отголоски Нвидии и заменяем на папку, откуда по идее должен быть libGL.so.1 (можно узнать, заюзав find / -name «libGL.so.1»)

/usr/lib/i386-linux-gnu/mesa

Ну и не забываем обновить кэш ld:

ldconfig

Обновляем образ, перегружаем клиента, радуемся,

ha_ha
Таким макаром мы сломали загрузу дров Нвидии.

Создадим и для неё отдельный xorg.conf.nvidia

xorg.conf.nvidia
Section "Files"
        ModulePath   "/usr/lib/nvidia-340/xorg"
        ModulePath   "/usr/lib/xorg/modules"
EndSection


Section "Device"
        Driver "nvidia"
        VendorName "NVIDIA coproration"
        BoardName "nvidia"
        Identifier      "Configured Video Device"
EndSection

не забудем прописать в lts.conf для клиентов с Нвидиа карточками

[client mac] 
X_CONF=/etc/X11/xorg.conf.nvidia

Но это ещё не всё…

Дело в том, что Nvidia подменяет системный libGL своим…, а мы заменив пути в /etc/ld.so.conf.d   тем самым указали использовать системный.

и через xorg.conf это никак не настроить =((    Тоесть придётся перед загрузкой клиента заранее прописывать какой там путь должен быть.

Как это сделать более элегантно я не придумал, кроме как запускать скрипты из rc.local

 

 

Вот как-то так =)

Views :

368

Ubuntu LTSP fat clients install NVIDIA drivers

Раздобыл тут на днях парочку толстых клиентов, но радость была недолгой, т.к. после подключения к сети картинка была вся в мыле и настройки не помогали.

Пришлось поплясать с бубном, что бы внедрить в дистрибутив драйвера от Нвидии, т.к. простой установкой nvidia-current дело не обошлось и всё равно грузился драйвер vesa.

Чтож, погнали:

переключаемся в рут к ltsp и монтируем нужные разделы:

sudo su
export LTSP_HANDLE_DAEMONS=false
chroot /opt/ltsp/i386
mount -t proc proc /proc

обновим систему:

sudo su
apt-get update
apt-get dist-upgrade

снесём отголоски предыдущих установок:

apt-get remove --purge nvidia-*
apt-get autoremove

Но это потянет за собой и оболочку, поэтому её нужно вернуть обратно (замените на свою, у меня lubuntu):

apt-get install lubuntu-desktop

установим заголовочники ядра и утилиты для пересборки:

apt-get install dkms build-essential linux-headers-generic

выпилим намертво vesa:

echo options nouveau modeset=0 | tee -a /etc/modprobe.d/nouveau-kms.conf
echo 'nouveau' | sudo tee -a /etc/modules
update-initramfs -u
nano /etc/modprobe.d/blacklist-nouveau.conf
>>blacklist nouveau
>>blacklist lbm-nouveau
>>options nouveau modeset=0
>>alias nouveau off
>>alias lbm-nouveau off

Что бы наверняка, можно вообще удалить её (не забудьте глянуть будет ли оболочка в списке зависимостей, если что — вернуть обратно, как-написано выше ):

apt-get --purge remove xserver-xorg-video-nouveau 

ну и ставим новые дрова (гляньте на сайте Нвидии какие подходят):

apt-get install nvidia-340

закругляемся:

umount /proc
exit
sudo ltsp-update-kernels
sudo ltsp-update-image

Осталось только в когфиге lts.conf прописать у клиентов какой драйвер использовать:

[client mac]
   XSERVER=nvidia

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

lspci -k| grep -EA2 'VGA|3D'

Вот как-то так =)

 

 

 

 

Views :

347

Ubuntu server (14.04, 15.04) настройка wifi WPA2-PSK (wpa_supplicant) через консольку.

Со всеми этими юзер-френдли интерфейсами «далее-далее» совсем забыл как руками настраивать wifi только через консольку.
Для начала залогинимся под рутом, что бы каждый раз sudo не вбивать

sudo su

убеждаемся, что адаптер работает и посмотрим на список сетей

iwconfig
iwlist wlan0 scan

должен показаться список сетей, запоминаем название нужной
для работы с зашифрованными сетями требуется утилита wpa_supplicat, которая уже есть в дистрибутиве,
нам её нужно просто настроить.
Вбиваем:

wpa_passphrase SSID PASS >> /etc/wpa_supplicant.conf

разумеется вместо SSID и PASS впишите название вашей сети и пароль к ней.
Этим мы дописали в файл настроек (/etc/wpa_supplicant.conf) название сети и хэш пароля (ну не хранить же его в открытом виде).
Теперь необходимо дать знать, что мы используем WPA2-PSK:

nano /etc/wpa_supplicant.conf
network={
   ssid="имя сети"
   scan_ssid=1
   proto=WPA RSN
   key_mgmt=WPA-PSK
   group=CCMP TKIP
   pairwise=CCMP TKIP
   psk= сгенерированныйхэш
}

На этом всё. В настройках может быть несколько сетей.

Теперь необходимо настроить интерфейсы

nano /etc/network/interfaces
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf

Ну и напоследок перезагрузим сетевые подключения:

/etc/init.d/networking restart

Впринципе, всё просто. Должно заработать.

Views :

2456

PoDoFo сборка для Qt на Ubuntu 14.10

PoDoFO

PoDoFo это библиотека для чтения и записи PDF файлов.

Для Windows мануал здесь.

Создаём папку, в которой будет идти вся сборка, у меня это ~/Projects/PoDoFO/

Скачиваем саму PoDoFO
Распаковываем файлы архива в папку  podofo-src

Ещё понадобиться LibJpeg
Распаковываем файлы в папку jpeg-9a
Компилируем LibJpeg.
В терминале:

cd ~/Projects/PoDoFo/jpeg-9a/
./configure
make
sudo make install

Так же потребуется LibPng, устанавливаем так:

sudo apt-get install libpng-dev

Теперь, наконец-то, собираем сам PoDoFo

cd  ~/Projects/PoDoFO/podofo-build/
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/Projects/PoDoFo/lib" ../podofo-src
make
sudo make install

Библиотека скомпилирована! Всё необходимое будет в папке ~/Projects/PoDoFo/lib

Документация по PoDoFo здесь.

Исходники тестового проекта Qt и PoDoFo.

Views :

723

Ubuntu Qt 5.6 mysql 5.6 драйвер не найден, но доступен (driver not loaded)

Собственно ошибка: SqlDatabase: QMYSQL driver not loaded

Обновил пост для Qt 5.6

Для Qt 5 и выше обычно mysql драйвер уже идёт в стандартной поставке.
Для уточнения переходим в каталог установки Qt а далее в папку с драйверами, у меня это /opt/Qt/Qt5.5.0/5.5/gcc_64/plugins/sqldrivers
по идее там должен быть libqsqlmysql.so

Если он там есть,  может быть, что не найдена какая-либо зависимость для libqsqlmysql.so
проверять так:

ldd libqsqlmysql.so

скорее всего будет не найдена (not found) зависимость libmysqlclient_r.so.16

Можно, конечно, только его и поставить, вот так:
[32]

wget http://launchpadlibrarian.net/75949497/libmysqlclient16_5.1.58-1ubuntu1_i386.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu1_i386.deb
[64]
wget http://launchpadlibrarian.net/94808408/libmysqlclient16_5.1.58-1ubuntu5_amd64.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu5_amd64.deb

Проверяем:

ldd libqsqlmysql.so

Может быть так же не доступны быть:
libssl.so.10 и libcrypto.so.10
Ставить их так:

sudo apt-get update
sudo apt-get install libssl1.0.0 libssl-dev
cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10

Впринципе, можно на этом остановиться,
но я решил использовать более новый, поэтому придётся пересобрать.

У меня стоит MySQL версии 5.5 (узнать можно в терминале командой mysql —version)
то потребуется драйвер собрать из исходников.
Запускаем консольку, вбиваем:

export QTDIR=/opt/Qt/Qt5.5.0/5.5/Src/qtbase
cd $QTDIR/src/plugins/sqldrivers/mysql
/opt/Qt/Qt5.5.0/5.5/gcc_64/bin/qmake
make
make install

Впринципе всё. Не забудьте пути заменить на свои. Qt у меня установлен в папке /opt/Qt/Qt5.5.0/.

Немного как подключится к базе MySQL из Qt
В проекте в файл *.pro   дабавить

QT+= sql

Ну а  потом в  классе прописать

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

Ну и подключаемся:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
db.setHostName("localhost");
db.setDatabaseName("WORKYS");
db.setUserName("root");
db.setPassword("12345");
bool ok = db.open();
qDebug()<< ((ok)? "DATABASE OPENED!!!!" : "DATABASE NOT OPENED" + db.lastError().text() );

Вот как то так =)

Views :

3770

Компиляция и установка OpenCV на Ubuntu для Qt 5.6 c поддержкой ffmpeg, gstreamer

Обновил для Qt 5.14, OpenCV 4.1 и Ubuntu 18.04

Ставим нужные пакеты:

sudo apt update 

sudo apt install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev 

sudo apt install libgstreamer1.0-0 libgstreamer1.0-dev gstreamer1.0-tools gstreamer1.0-plugins-base libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad  gstreamer1.0-libav

sudo apt install libgtkglext1 libgtkglext1-dev

Добавим x264 и ffmpeg по вкусу:

sudo apt install nasm
git clone https://code.videolan.org/videolan/x264
cd x264
./configure --enable-shared --enable-pic
make
sudo make install
cd ..
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install libjpeg62 libjpeg62-dev libjpeg9 libjpeg9-dev 

git clone https://github.com/FFmpeg/FFmpeg
cd FFmpeg

./configure --enable-gpl --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-shared

make
sudo make install
cd ..

Ну и теперь клонируем наш OpenCV, настраиваем:

git clone https://github.com/Itseez/opencv.git OpenCV
cd OpenCV
mkdir build
cd build
export PATH=/home/pavelk/Qt5.14.0/5.14.0/gcc_64/bin:$PATH
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/ -DWITH_OPENGL=ON -DWITH_QT=ON

В PATH только путь на свой замените.

Выхлоп должен быть примерно таким
— Detected processor: x86_64
— Looking for ccache — not found
— Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found suitable version «1.2.11», minimum required is «1.2.3»)
— Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
— Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR)
— Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version «1.2.11»)
— found Intel IPP (ICV version): 2019.0.0 [2019.0.0 Gold] — at: /home/pavelk/OpenCV/build/3rdparty/ippicv/ippicv_lnx/icv
— found Intel IPP Integration Wrappers sources: 2019.0.0
— at: /home/pavelk/OpenCV/build/3rdparty/ippicv/ippicv_lnx/iw
— Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
— Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
— Could NOT find Atlas (missing: Atlas_CBLAS_INCLUDE_DIR Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY)
— A library with BLAS API not found. Please specify library location.
— LAPACK requires BLAS
— A library with LAPACK API not found. Please specify library location.
— Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
— VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
— OpenCV Python: during development append to PYTHONPATH: /home/pavelk/OpenCV/build/python_loader
— Checking for module ‘libavresample’
— No package ‘libavresample’ found
— Checking for module ‘libdc1394-2’
— No package ‘libdc1394-2’ found
— Caffe: NO
— Protobuf: NO
— Glog: NO
— freetype2: YES (ver 21.0.15)
— harfbuzz: YES (ver 1.7.2)
— Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version «»)
— Module opencv_ovis disabled because OGRE3D was not found
— No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
— Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
— Failed to find gflags — Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
— Failed to find gflags — Could not find gflags include directory, set GFLAGS_INCLUDE_DIR to directory containing gflags/gflags.h
— Failed to find glog — Could not find glog include directory, set GLOG_INCLUDE_DIR to directory containing glog/logging.h
— Module opencv_sfm disabled because the following dependencies are not found: Eigen Glog/Gflags
— Checking for module ‘tesseract’
— No package ‘tesseract’ found
— Tesseract: NO
— Registering hook ‘INIT_MODULE_SOURCES_opencv_dnn’: /home/pavelk/OpenCV/modules/dnn/cmake/hooks/INIT_MODULE_SOURCES_opencv_dnn.cmake
— opencv_dnn: filter out cuda4dnn source code

— General configuration for OpenCV 4.2.0-dev =====================================
— Version control: 4.2.0-32-gf6ec467f19

— Extra modules:
— Location (extra): /home/pavelk/OpenCV/opencv_contrib/modules
— Version control (extra): 4.2.0-4-g648db235

— Platform:
— Timestamp: 2020-01-03T13:12:12Z
— Host: Linux 5.0.0-37-generic x86_64
— CMake: 3.10.2
— CMake generator: Unix Makefiles
— CMake build tool: /usr/bin/make
— Configuration: Release

— CPU/HW features:
— Baseline: SSE SSE2 SSE3
— requested: SSE3
— Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
— requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
— SSE4_1 (16 files): + SSSE3 SSE4_1
— SSE4_2 (2 files): + SSSE3 SSE4_1 POPCNT SSE4_2
— FP16 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
— AVX (5 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
— AVX2 (29 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
— AVX512_SKX (6 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX

— C/C++:
— Built as dynamic libs?: YES
— C++ Compiler: /usr/bin/c++ (ver 7.4.0)
— C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
— C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
— C Compiler: /usr/bin/cc
— C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG
— C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG
— Linker flags (Release): -Wl,—gc-sections
— Linker flags (Debug): -Wl,—gc-sections
— ccache: NO
— Precompiled headers: NO
— Extra dependencies: dl m pthread rt /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so
— 3rdparty dependencies:

— OpenCV modules:
— To be built: aruco bgsegm bioinspired calib3d ccalib core cvv datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
— Disabled: world
— Disabled by dependency: —
— Unavailable: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev hdf java js matlab ovis python2 python3 sfm viz
— Applications: tests perf_tests apps
— Documentation: NO
— Non-free algorithms: NO

— GUI:
— QT: YES (ver 5.14.0)
— QT OpenGL support: YES (Qt5::OpenGL 5.14.0)
— GTK+: NO
— OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so)
— VTK support: NO

— Media I/O:
— ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
— JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 90)
— WEBP: build (ver encoder: 0x020e)
— PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.34)
— TIFF: build (ver 42 — 4.0.10)
— JPEG 2000: build (ver 1.900.1)
— OpenEXR: build (ver 2.3.0)
— HDR: YES
— SUNRASTER: YES
— PXM: YES
— PFM: YES

— Video I/O:
— DC1394: NO
— FFMPEG: YES
— avcodec: YES (58.65.102)
— avformat: YES (58.35.101)
— avutil: YES (56.38.100)
— swscale: YES (5.6.100)
— avresample: NO
— GStreamer: YES (1.14.5)
— v4l/v4l2: YES (linux/videodev2.h)

— Parallel framework: pthreads

— Trace: YES (with Intel ITT)

— Other third-party libraries:
— Intel IPP: 2019.0.0 Gold [2019.0.0] — at: /home/pavelk/OpenCV/build/3rdparty/ippicv/ippicv_lnx/icv
— Intel IPP IW: sources (2019.0.0)
— at: /home/pavelk/OpenCV/build/3rdparty/ippicv/ippicv_lnx/iw
— Lapack: NO
— Eigen: NO
— Custom HAL: NO
— Protobuf: build (3.5.1)

— OpenCL: YES (no extra features)
— Include path: /home/pavelk/OpenCV/3rdparty/include/opencl/1.2
— Link libraries: Dynamic load

— Python (for build): /usr/bin/python2.7

— Java:
— ant: NO
— JNI: NO
— Java wrappers: NO
— Java tests: NO

— Install to: /usr/local/opencv
— ——————————————————————

— Configuring done
— Generating done
— Build files have been written to: /home/pavelk/OpenCV/build

наконец-то собираем и ставим:

make -j5
make install
Кстати, «-j5» отвечает за количество потоков сборки, можете увеличить, если больше есть.

Если нужны дополнительные модули, например xfeatures2d для работы со SURF, то нужно их скачать отдельно

cd OpenCV
git clone https://github.com/opencv/opencv_contrib

и в параметры компиляции у cmake добавить:

-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules
Если какой-либо модуль при сборке будет ебать мозг, то к cmake дописать -DBUILD_opencv_modulename=OFF

Все библиотеки будут в папке /usr/local/opencv/

Простенький пример для Qt Creator: Создаём консольное приложение, в *.pro файл проекта добавляем:

QT += widgets
INCLUDEPATH +="/usr/local/opencv/include/opencv4" 
LIBS += -L"/usr/local/opencv/lib/" 
LIBS += \
   -lopencv_core \ 
   -lopencv_features2d \ 
   -lopencv_highgui \ 
   -lopencv_imgcodecs \ 
   -lopencv_imgproc \ 
   -lopencv_video \ 
   -lopencv_videoio \ 
   -lopencv_videostab
#include <QApplication>

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    namedWindow("TestVideo", WINDOW_AUTOSIZE);

    VideoCapture cap("/home/pavelk/bumpy.mp4");

    if ( !cap.isOpened() ) {
        cout << "Cannot open the video file."<<endl;
        return -1;
    }

    while( true ) {
        Mat frame;

        if (!cap.read(frame)) {
            cout<<"Cannot read the video file."<<endl;
            break;
        }

        imshow("TestVideo", frame);

        if( waitKey(30)==27 ) { break; }
    }

    return a.exec();
}

Вот как-то так…

Views :

3713