Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt при кросс-сборке не видит библиотек MySQL



  • Баг на баге и багом погоняет. Добрового времени суток.
    Собственно продолжение темы описанной в посте https://forum.qt.io/topic/77590/кросскомпиляция-проектов-qt-под-arm/15

    Как уже было сказано в предыдущем посте - сборка прошла успешно, комплект установился и производил сборку проектов. Запуск проектов на целевой плате тоже был побежден. Онако вылезла потребность в работе с MySQL. На целевом устройстве были установлены необходимые зависимости, как и в прошлый раз был скопирован целевой рут с исправлением символических ссылок, однако при конфигурации выяснилось что сборшик не видит либ MySQL. При явном задании опции -sql-mysql конфигурация заканчивается с ошибкой на тему что нет билиотек и их было бы неплохо поставить.

    Дальше были танцы с бубном:

    При явном задании путей загрузки либ таким образом
    -L /opt/x-tools/arm-opiz-linux-gnueabihf/arm-opiz-linux-gnueabihf/sysroot/usr/lib
    -L /opt/x-tools/arm-opiz-linux-gnueabihf/arm-opiz-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf
    -L /opt/x-tools/arm-opiz-linux-gnueabihf/arm-opiz-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf \

    либо в файле спецификации устройства

    $$[QT_SYSROOT]/usr/lib
    $$[QT_SYSROOT]/lib/arm-linux-gnueabihf
    $$[QT_SYSROOT]/usr/lib/arm-linux-gnueabihf
    $$[QT_SYSROOT]/lib

    конфигурация отрабатывала замечательно, нужные библиотеки сразу находились, однако при сборке сразу начинались приколы (типа таких)

    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManagerV2::timeBeforeUser(): error: undefined reference to 'QDeadlineTimer::current(Qt::TimerType)'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManagerV2::timeBeforeUser(): error: undefined reference to 'QDeadlineTimer::deadlineNSecs() const'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManager::timeBeforeUser(): error: undefined reference to 'QDeadlineTimer::current(Qt::TimerType)'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManager::timeBeforeUser(): error: undefined reference to 'QDeadlineTimer::deadlineNSecs() const'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManagerV2::timeAfterUser(): error: undefined reference to 'QDeadlineTimer::current(Qt::TimerType)'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManagerV2::timeAfterUser(): error: undefined reference to 'QDeadlineTimer::deadlineNSecs() const'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManager::timeAfterUser(): error: undefined reference to 'QDeadlineTimer::current(Qt::TimerType)'
    .obj/qtconcurrentiteratekernel.o:qtconcurrentiteratekernel.cpp:function QtConcurrent::BlockSizeManager::timeAfterUser(): error: undefined reference to 'QDeadlineTimer::deadlineNSecs() const'
    collect2: error: ld returned 1 exit status
    Makefile:143: ошибка выполнения рецепта для цели «../../lib/libQt5Concurrent.so.5.8.0»
    make[3]: *** [../../lib/libQt5Concurrent.so.5.8.0] Ошибка 1
    make[3]: выход из каталога «/opt/buildOPIZ/build/qtbase/src/concurrent»
    Makefile:420: ошибка выполнения рецепта для цели «sub-concurrent-make_first»
    make[2]: *** [sub-concurrent-make_first] Ошибка 2
    make[2]: *** Ожидание завершения заданий…

    и на этом все заканчивалось.

    Непонятно в чем причина, возможно необходимо задать еще какие либо пути, если кто подскажет - буду очень благодарен.



  • @Konstantin-Tokarev Походу на форуме только два человека живых))) Один задает глупые вопросы а второй отвечает)))

    Почему плохая идея? На данный момент на устройстве работает база, вот только ее порт выброшен во внешнюю сеть, а это действительно плохая идея, вот и хочу реализовать демон, который будет выступать посредником между клиентом и базой данных.

    Короче, суть проблемы была в следующем: При указании путей для поиска либ, сборшик начинал брать из целевого рута либы qt старой версии, установленные из бинарных пакетов из репозитория, вместо тех что он собрал. Т.к. они более старой версии (5.6) возникали конфликты при сборке. После их удаления из целевого рута (точнее копией целевого рута с которым работает компилятор) проблема разрешилась. Сборка Qt прошла удачно, и была включена поддержка MySQL.



  • @Homer2000 said in Qt при кросс-сборке не видит библиотек MySQL:

    Онако вылезла потребность в работе с MySQL

    Плохая идея, кроме случая если мусуль и девайс взаимодействуют по локальной сети



  • @Konstantin-Tokarev Походу на форуме только два человека живых))) Один задает глупые вопросы а второй отвечает)))

    Почему плохая идея? На данный момент на устройстве работает база, вот только ее порт выброшен во внешнюю сеть, а это действительно плохая идея, вот и хочу реализовать демон, который будет выступать посредником между клиентом и базой данных.

    Короче, суть проблемы была в следующем: При указании путей для поиска либ, сборшик начинал брать из целевого рута либы qt старой версии, установленные из бинарных пакетов из репозитория, вместо тех что он собрал. Т.к. они более старой версии (5.6) возникали конфликты при сборке. После их удаления из целевого рута (точнее копией целевого рута с которым работает компилятор) проблема разрешилась. Сборка Qt прошла удачно, и была включена поддержка MySQL.



  • Когда мне понадобилось использовать mysql я вытащил нужные либы из панели управления mysql сервером, mysql workbench.



  • @Homer2000 said in Qt при кросс-сборке не видит библиотек MySQL:

    На данный момент на устройстве работает база,

    Вот это плохая идея :)

    На таких устройствах лучше sqlite использовать, так как развернуться на всю катушку мускулю не хватит ресурсов



  • @TheGringerEye

    @TheGringerEye said in Qt при кросс-сборке не видит библиотек MySQL:

    Когда мне понадобилось использовать mysql я вытащил нужные либы из панели управления mysql сервером, mysql workbench.

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



  • @Konstantin-Tokarev said in Qt при кросс-сборке не видит библиотек MySQL:

    @Homer2000 said in Qt при кросс-сборке не видит библиотек MySQL:

    На данный момент на устройстве работает база,

    Вот это плохая идея :)

    На таких устройствах лучше sqlite использовать, так как развернуться на всю катушку мускулю не хватит ресурсов

    Не спорю, но тут есть пару моментов:

    1. Если придеться масштабировать проект то sqlite не покатит, т.к. по сети явно работать не будет, а мускул с демоном можно раскинуть по разным машина
    2. Так исторически сложилось, и уже существует бд с приличным количеством записей, и для того чтобы перепилить на лайт - нужно поработать, а учитывая первый пункт браться за это не стоит.
    3. Мускул проще админить, для него существует больше готовых приблуд, не всегда есть силы и время да и желание на изобретения велосипедов.

    ну и самый главный + ко всему эпосу - с бд я начал знакомиться гдето полгода назад. Конечно до этого знал что это такое и что оно есть но руками не щупал)) Поэтому в выборе и работе с этим допускаю приличное количество ляпов))



  • Походу на форуме только два человека живых)

    В русской резервации - да. Тут даже в правилах написано, что не пишите сюда по вопросам разработки, этот раздел форума исключительно для каких-нибудь специфичных "русских" проблем, то же самое для резерваций и на других языках.



  • @Homer2000 said in Qt при кросс-сборке не видит библиотек MySQL:

    мускул с демоном можно раскинуть по разным машина

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



  • @Konstantin-Tokarev Так на распределение по локальной сети и рассчитано


Log in to reply