это просто пост ненависти... чтобы было
предыстория
Понадобилось написать android версию, одной утилиты спец назначения, которой нужно лазить в уже готовую бд под mysql, если бы я знал что это такой геморрой может быть и сменил бд в исходном проекте
из готовый драйверов, под андроид в QT5 оказался только qlite, чтоб собрать драйвер нужен клиент под android, cначала начал итскать готовый libmysqsl.so долго рылся - вывод в основном такой mysdl для android не нативен собирать самим. Нашел несколько собраных - со всеми падало.
почитал
Libmysqlclient native port to android,
Разработка Qt-приложения с доступом к MySQL под Android и
Cross-compiling MySQL и еще много шлака, но основная проблема что я все это собирался под виндой собирать
в итоге нужно Cmake QT5 visualstudio android-ndk, исходники
Connector/C (libmysqlclient) is a client library for C development. и
android.toolchain.cmakeв android.toolchain.cmake есть инстукция как собирать под винду, у меня получилось так
SET ANDROID_NDK=C:\Android\android-ndk-r10e
cmake.exe -G"MinGW Makefiles"
-DCMAKE_TOOLCHAIN_FILE=путь к\android.toolchain.cmake
-DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows-x86_64\bin\make.exe"
-DANDROID_ABI=armeabi-v7a
-DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.8
-DANDROID_NATIVE_API_LEVEL=android-19
-DSTACK_DIRECTION=1
дальше было много всякого из того что осталось в записях
ошибка #define S_IREAD
в добавил ...\platforms\android-19\arch-arm\usr\include\linux\stat.h
#if !defined(S_IREAD) && defined(S_IRUSR)
# define S_IREAD S_IRUSR
# define S_IWRITE S_IRUSR
#endif
error: unknown type name 'pthread_barrier_t'
в \platforms\android-19\arch-arm\usr\include\pthread.h
typedef struct {
#if defined(__LP64__)
int64_t __private[4];
#else
int32_t __private[8];
#endif
} pthread_barrier_t;
error: 'SYS_gettid' undeclared
mysql-connector-c-6.1.6-src\mysys\posix_timers.c:73
в api-21 этот кусок собирался в posix_timers.c добавил
#include <sys/glibc-syscalls.h>
и скинул glibc-syscalls.h из android-21 в 19:)
Вылезло Generating ... comp_err: not found
собрал mysql клиент для винды через visualstudio и забрал оттуда extra\*.exe
в make файлах комментировал создание симлинков и удаление файлов т.е. вызывались ln -s и rm, както наверно это должно по другому делаться, более красиво...
в итоге клиент собрался! два вечера и суббота
дальше собираем драйвер из исходников QT открываем 5.6\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro
добавляем путь к собраному клиенту
LIBS += -Lпуть\mysql-connector-c-6.1.6-src\libs\armeabi-v7a
велез install_target error 1
поправил в make C:$(INSTALL_ROOT на $(INSTALL_ROOT
собрался libqsqlmysql.so кладем в \Qt\5.6\android_armv7\plugins\sqldrivers\
собираем проект добавляем и добавляем в либы libmysqlclient.so - все работает!
но как оказалось только в android-6, на остальных платформах до боли знакомый Driver not loaded!
в итоге убрал из папки клиента все shared либы оставил только статику пересобрал драйвер получился
нужный libqsqlmysql.so работает везде
времени потрачено караул - проще было исходный проект перевести на что нибудь другое наверно...
в приложениях клиент mysql для android и драйвер для QT5.6 - может кто поиском набредет пригодится
ps может все это как то можно проще сделать...