Последнее обновление:
December 7, 2016

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

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

Впринципе, алгоритм действий точно такой же, как и в предыдущем посте под Ubuntu

Здесь приведу лишь отличия по пунктам

  1. Качаем  драйвер, распаковываем и ставим. Вместо ST-Link поставим OpenOCD  , скачиваем, распаковываем в любую папку.
  2. Качаем GCC ARM с https://launchpad.net/gcc-arm-embedded (справа в списке экзешник) и ставим.
  3. Путь компилятора C:\Program Files (x86)\GNU Tools ARM Embedded\5.4 2016q3\bin\arm-none-eabi-gcc.exe (либо в ту папку, куда поставили),
    отладчик придётся скачать qtcreator-gdb-7-7-mingw32_nt-6-1-i686 (т.к. для Qt Creator нужно, что бы он был с поддержкой питона), распаковываем в любую папку и прописываем полный путь, имя на ваше усмотрение.
  4. При добавлении выбираем OpenOCD,
    исполняемый файл: прописываете полный путь до OpenOCD.exe,
    файл конфигурации ставите <full path>\openocd-0.9.0\scripts\board\stm32f3discovery.cfg  под свою плату.
  5. Также
  6. Также
  7. Так же

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

P.S  Вместо OpenOCD можно использовать старую добрую st-link-utility под Windows, но она старовата и, как мне кажется, тормознута.

Views :

9

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

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

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

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

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

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

cd ~/Projects/ST-Link-Utility
git clone https://github.com/texane/stlink .
make 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 apt-get install gcc-arm-none-eabi
sudo apt-get install gdb-arm-none-eabi

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

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

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

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

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

Views :

18

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

и пропишем в 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

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

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

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

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

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

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

 

 

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

Views :

15

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 :

8

Конвертация QVideoFrame to OpenCV Mat в Qt5.6 и OpenCV3.1

Потребовалось на днях обрабатывать кадры с камеры (Использовалась QCamera) через OpenCV.

Да,  OpenCV может сам захватывать фреймы, но в случае с Qt QCamera работает лучше и есть больше параметров (например выбо р формата YUV или MJPG).

Вот так выглядит конвертация:

 QVideoFrame copy(frame);
    if (frame.isValid() && copy.map(QAbstractVideoBuffer::ReadOnly)) {
        Mat frameYUV=Mat(copy.height() + copy.height()/2, copy.width(), CV_8UC1, (void*)copy.bits() );
        
        Mat frameRGB;
        cvtColor(frameYUV, frameRGB, CV_YUV2BGRA_I420);

        imshow("Video", frameRGB);

    }

C камеры приходит QVideoFrame frame в формате YUV.

Вот и всё =)

 

 

Views :

19

Сервер-ретранслятор для IP H264 камер.

Приветствую!

В одном проекте возникла необходимость получать видео с IP камеры, вещающей в H264 формате и всё было хорошо, пока клиентов, подключённых к камере, было раз-два да обчёлся.

Но пользователей проекта становилось всё больше и камера просто не выдерживала по 5-6 клиентов и начинала адцки лагать т.к. сеть у неё всего 100 мб, да и производительность около нуля.

Было решено найти софт сервера-ретранслятора, т.к. канал от сервера до клиентов достаточно толстый, а большую часть времени он просто курит бамбук,

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

Чтож, пришлось написать свой велосипед.

Ссылочка на ГитХаб.

Написан на Qt 5.6 без использования сторонних библиотек и других зависимостей.

 

Из плюшек:

  • многопоточность (которая, сука, выжирает всё, что может: по потоку на канал камеры и по потоку на клиента),
  • независимость от сторонних библиотек (просто лень искать было подходящие 😀 )
  • говнокодность (писался на скорую руку, архитектура кастовалась походу раскуривания протоколов RTSP, RTP, SDP )
  • после сборки доработать напильником ( тестировал только на камерах проекта (китайских no-name) и собственных клиентах )
  • выкладываю  как есть  и обновляться будет лишь при возникновении багов в основном проекте т.к. всем — не угодишь и смотри предыдущий пункт =)

 

 

 

Views :

78

Qt настраиваем логирование в проекте (формат лога)

Приветствую!

Отладочные сообщения в QtCreator достаточно не информативные, особенно в большом проекте, а каждый раз прописывать  что-то вроде:

qDebug()<<"MyClass::functionName params"<<p1<<p2;

что бы знать в каком хоть классе и функции идёт вывод достаточно долго.

Мало кто знает, но можно перехватить вывод qDebug, а заодно qInfo, qWarning и т.д. делается это так:

в main.cpp  сразу после QApplication app(…); прописываем:

 qInstallMessageHandler(myMessageHandler);

В *.pro файле добавляем:

DEFINES += QT_MESSAGELOGCONTEXT

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

#include <QDateTime>
void myMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &msg)
{
    QString txt;   
    static long long uid=0; //-- номеруем вывод
    //-- название функции с классом, берём только класс и саму функцию
    QRegExp rx("([\\w-]+::[\\w-]+)");
    if (rx.indexIn(context.function) ==-1) return;
    QString function = rx.cap(1);

    QString msgSep = (msg.length()>0)? ">> " : "";

    switch (type) {
        case QtInfoMsg:
            txt = QString("Info: %1%2%3").arg(function).arg(msgSep).arg(msg);
        break;
        case QtDebugMsg:
            txt = QString("Debug: %1%2%3").arg(function).arg(msgSep).arg(msg);
            break;
        case QtWarningMsg:
            txt = QString("Warning: %1%2%3").arg(function).arg(msgSep).arg(msg);
        break;
        case QtCriticalMsg:
            txt = QString("Critical: %1%2%3").arg(function).arg(msgSep).arg(msg);
        break;
        case QtFatalMsg:
            txt = QString("Fatal: %1%2%3").arg(function).arg(msgSep).arg(msg);
            abort();
        break;
    }

    QDateTime dateTime = QDateTime::currentDateTime();
    uid++;
    txt=QString("%1:%2 %3").arg(dateTime.toString(Qt::ISODate)).arg(uid).arg(txt);

    QFile outFile(QString("%1/log-%2.log").arg(".").arg(QDate::currentDate().toString("dd.MM.yy")));
    outFile.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream ts(&outFile);
    ts << txt << endl;
    outFile.close();


}

Дальше, если у вас Линь, то достаточно просто в консольке прописать:

tail -f  log-18.09.16.log

и весь вывод будет идти в реал тайме.

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

 

 

 

 

Views :

40

Хоткеи на клавиши мыши

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

Устанавливаем xbindkeys для отлова событий и запуска нужных комманд, а что бы вместо запуска комманд мы эмулировали нажатие клавиш установим ещё и xautomation

 

sudo apt-get install xbindkeys
sudo apt-get install xautomation

сразу создаём дефолтный конфиг файл в домашней папке:

xbindkeys -d > ~/.xbindkeysrc

Нам бы теперь нужно узнать наименование кнопок мыши, запускаем:

xev | grep state

жмём кнопки в открывшемся окне, в консоли смотрим название клавиши, а для мышки смотрим номер кнопки (Button 8, Button 9 и тд)

Правим конфиг:

sudo nano ~/.xbindkeysrc

прописываем:

#ENTER
"xte 'key Return'"
b:9

#ESCAPE
"xte 'key Escape'"
b:8

Думаю, смысл понятен?

Возможно xbindkeys уже был запущен и тогда возможны ошибки. Прибьём навсякий случай и запустим вновь:

sudo killall xbindkeys
xbindkeys

наслаждаемся =)

 

Views :

18

Установка Zend Framework 2 в Ubuntu

Тут впринципе всё просто

wget https://packages.zendframework.com/releases/ZendFramework-2.4.9/ZendFramework-2.4.9.tgz
tar -xvzf ZendFramework-2.4.9.tgz

Что бы скрипты имели доступ, нужно в конфиге серва NGINX у location php прописать

fastcgi_param ZF2_PATH /usr/lib/php/zf2/ZendFramework-2.4.9/library;

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

 

Views :

48

Android MySql (QMysql) драйвер для Qt5.6 на Windows и Linux компиляция

В общем понадобилось портировать одну прогу под Андроид arm7, но она плотненько работает с базой данных, а так как я человек впринципе ленивый, то обёртку для REST API сервера было лень писать, решился на компилирование MySQL плагина, но если бы я знал тогда, что это займёт у меня 20 часов…
красноглазик

 

В общем вот вам готовый рецепт из 12 шагов для компиляции на Ubuntu и на Windows
То, что помечено windows16 -выполнять только на винде.
Установим инструменты:
1. Качаем и устанавливаем CMake https://cmake.org/download/ у меня 3.5.2
2. Разумеется Android NDK у вас уже должен быть установлен, но вдруг: https://developer.android.com/tools/sdk/ndk/index.html
windows163. Качаем и ставим MSYS https://sourceforge.net/projects/mingw/files/latest/download?source=files (отмечаем всё, что можно)
4. При установке Qt нужно было поставить и исходники (папка qt/5.6/src/qtbase), если нет её, то качаем и ставим
windows165. Открываем консольку MSYS (c:\mingw\msys\1.0\msys.bat), в дальнейшем все действия будут вестись в ней и для удобства выкачивания установим wget:

/c/mingw/bin/mingw-get install msys-wget-bin

1. Создадим отдельную директорию, где будем развлекаться и перейдём в неё:

mkdir /d/Projects/AndroidMySQL
 cd /d/Projects/AndroidMySQL

2. Выкачиваем саму MariaDB, а именно коннектор

wget https://downloads.mariadb.org/interstitial/connector-c-3.0.0/mariadb-connector-c-3.0.0-alpha-src.tar.gz
 tar -xzvf mariadb-connector-c-3.0.0-alpha-src.tar.gz

3. Выкачиваем и распаковываем исходники iconv http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
 tar -xvzf libiconv-1.14.tar.gz

4. Выкачиваем и распаковываем OpenSSL

wget -c http://www.openssl.org/source/openssl-1.0.1h.tar.gz --no-check-certificate
 tar -xvzf openssl-1.0.1h.tar.gz

5. Задаём общие глобальные переменные
windows16

 export PATH="$PATH:/c/mingw/bin:/c/Program Files (x86)/CMake/bin"
 export ANDROID_NDK_ROOT=/d/Android/android-ndk-r10e
 export SR="$ANDROID_NDK_ROOT"/platforms/android-19/arch-arm/usr # Укажите платформу, под которую собираете ваши проекты (Лучше, 19)
 export BR="$ANDROID_NDK_ROOT"/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-
 export CPP="$BR"cpp
 export AR="$BR"ar
 export STRIP="$BR"strip
 export RANLIB="$BR"ranlib
 export LINKER="$BR"ld
 export OBJDUMP="$BR"objdump
 export CC="$BR"gcc
 export CFLAGS="--sysroot=$SR"
 export CPPFLAGS="$CFLAGS"
 export C_INCLUDE_PATH=$SR/include
 export ANDROID_DEV=$SR/usr
 export MAKEDEPPROG="$CC -M"

6. Собираем сначала iconv

cd libiconv-1.14
 ./configure --host=arm --prefix=$SR/usr --with-sysroot=$SR
 make
 make install

7. Собираем OpenSSL

cd ../openssl-1.0.1h
 CC="$CC -march=armv7-a -mfloat-abi=softfp"
 ./Configure android-armv7 --prefix=$SR/usr no-asm
 make
 make install
 make install_sw
Если заматериться error: undefined reference to ‘__ctype_get_mb_cur_max’,
то в файл libcharset/lib/localcharset.c после дефайнов добавляем

size_t __ctype_get_mb_cur_max(void){
 return 1;
 }

8. Нус, начинаем подготовку к сборке MariaDB

В файл include/my_global.h необходимо добавить определение типа ushort

#ifndef ushort
 #define ushort uint16
 #endif

9. Подготавливаем сборку

cd ../mariadb-connector-c-3.0.0-alpha-src
mkdir build
 cd build
cmake -G "Unix Makefiles"
 -DCMAKE_BUILD_TYPE=Release \
 -DCMAKE_AR="$BR"ar.exe \
 -DCMAKE_C_COMPILER="$BR"gcc.exe \
 -DCMAKE_C_FLAGS=--sysroot=$SR \
 -DCMAKE_LINKER="$BR"ld.exe \
 -DCMAKE_RANLIB="$BR"ranlib.exe \
 -DCMAKE_STRIP="$BR"strip.exe \
 -DCMAKE_SYSTEM_NAME=Linux \
 -DICONV_INCLUDE_DIR="$SR/usr/include" \
 -DICONV_LIBRARIES="$SR/usr/lib/libiconv.a" \
 -DOPENSSL_ROOT_DIR="$SR/usr/lib/" \
 ../

10. Зажмуриваемся и собираем

make
windows16 ага, фиг то там, failed to create symbolic link ‘libmysqlclient.a’: No error
внезапно… тут, похоже, баг самого CMake, поэтому в файле
\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\build\libmariadb\CMakeFiles\SYM_libmysqlclient.a.dir\build.make
находим строки (их по две) c -E create_symlink libmariadbclient.a libmysqlclient.a, удаляем её полностью
а так же -E create_symlink libmariadb.so libmysqlclient_r.so аналогично
и вручную копируем и продолжаем сборку

cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient.a
 cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient_r.a
 cp libmariadb/libmariadb.so libmariadb/libmysqlclient.so
 cp libmariadb/libmariadb.so libmariadb/libmysqlclient_r.so
 make
и ещё раз фиг error: unknown type name ‘pthread_mutex_t’
в файле ../unittest/libmariadb/thread.c
находим pthread_t threads[THREAD_NUM]; заменяем на void * threads[THREAD_NUM];
и там же заменяем pthread_mutex_t LOCK_test; на void * LOCK_test;
и опять
make

На этот раз должно всё ок пройти, ну и устанавливаем и копируем к нашему ndk

make install
mkdir "$SR/usr/lib/mariadb"
 mkdir "$SR/usr/include/mariadb/"
 cp libmariadb/*.{a,so} "$SR/usr/lib/mariadb/"
 cp ../include/* "$SR/usr/include/mariadb/"

11. Собираем плагин QMySQL, открываем обычную консольку пути только на свои замените

cd /d/Qt/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/
 /d/Qt/5.6/android_armv7/bin/qmake.exe \
 "INCLUDEPATH+=$SR/usr/include/mariadb" \
 "LIBS+=-L$SR/usr/lib/mariadb -lmariadbclient -lssl -lcrypto -liconv" \
 -o Makefile mysql.pro
make
 make install

12. Разрабатываем тестовый проект
Так как зависит от libmariadb.so, то его необходимо таскать с проектом, для этого в *.pro файле проекта добавить

contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
 ANDROID_EXTRA_LIBS = \
 d:/Projects/AndroidMySQL/mariadb-connector-c-3.0.0-alpha-src/build/libmariadb/libmariadb.so
 }

Пересобираем проект, запускаем, и хуй то там =)
QMYSQL driver not loaded
яоминь
Посмотрим зависимости libqsqlmysql.so, которая в каталоге /home/pavelk/Qt/5.6/android_armv7/plugins/sqldrivers

ldd libqsqlmysql.so

и опять облом, нужна ldd для arm, ладно и с этим разберёмся, например так, тынц.

ldd-avr libqsqlmysql.so

Дело в том, что в зависимостях у libmysql.so есть libmariadb.so.3, а не libmariadb.so
почуяли разницу? =))

В общем, что бы побыстроляну пофиксить
в файле libmariadb/CMakeLists.txt
находим

SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})

и заменяем на

SOVERSION "so")

ну а дальше удалить полностью build и заново, начиная с 9 шага
troll

!пересобираем! проект, не забыть исправить в pro файле на libmariadb.so.so запускаем и радуемся =)

Итого: сэкономлено куча времени и нервов. Хоть спасибо скажите =))

Views :

232