2017-09-04 2 views
0

Noch ein weiterer Linux-Build newb hier, kämpfen, Mariadb-Client für Android mit dem NDK zu bauen.Mariadb-Client mit Android NDK bauen

Ich habe bereits erfolgreich openssl und libiconv gebaut, die Voraussetzungen sind. Hier

ist, was ich tue:

export ANDROID_NDK_ROOT="/home/dev/android-ndk-r12b" 
SR="$ANDROID_NDK_ROOT/platforms/android-16/arch-arm" 
BR="$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" 


mkdir build && cd build 
PKG_CONFIG_PATH=$SR/usr/lib/pkgconfig cmake -DCMAKE_AR="$BR"ar -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$BR"gcc -DCMAKE_C_FLAGS=--sysroot=$SR -DCMAKE_INSTALL_PREFIX=$SR/usr -DCMAKE_LINKER="$BR"ld -DCMAKE_NM="$BR"nm -DCMAKE_OBJCOPY="$BR"objcopy -DCMAKE_OBJDUMP="$BR"objdump -DCMAKE_RANLIB="$BR"ranlib -DCMAKE_STRIP="$BR"strip -DWITH_EXTERNAL_ZLIB=ON -DICONV_INCLUDE_DIR=$SR/usr/include -DICONV_LIBRARIES=$SR/usr/lib/libiconv.a -DZLIB_INCLUDE_DIR=$SR/usr/include -DZLIB_LIBRARY=$SR/usr/lib/libz.so ../ 
make install 

zu brechen, dass im letzten Teil, damit es besser lesbar ist:

PKG_CONFIG_PATH=$SR/usr/lib/pkgconfig 
cmake 
-DCMAKE_AR="$BR"ar 
-DCMAKE_BUILD_TYPE=Release 
-DCMAKE_C_COMPILER="$BR"gcc 
-DCMAKE_C_FLAGS=--sysroot=$SR 
-DCMAKE_INSTALL_PREFIX=$SR/usr 
-DCMAKE_LINKER="$BR"ld 
-DCMAKE_NM="$BR"nm 
-DCMAKE_OBJCOPY="$BR"objcopy 
-DCMAKE_OBJDUMP="$BR"objdump 
-DCMAKE_RANLIB="$BR"ranlib 
-DCMAKE_STRIP="$BR"strip 
-DWITH_EXTERNAL_ZLIB=ON 
-DICONV_INCLUDE_DIR=$SR/usr/include 
-DICONV_LIBRARIES=$SR/usr/lib/libiconv.a 
-DZLIB_INCLUDE_DIR=$SR/usr/include 
-DZLIB_LIBRARY=$SR/usr/lib/libz.so 

Der erste Fehler, den ich bekam, war, dass program_invocation_short_name in this bit of code nicht definiert wurde:

#elif defined(_GNU_SOURCE) 
     const char * appname = program_invocation_short_name; 
#elif defined(WIN32) 

Ich konnte nicht finden, warum das ist und wie man, s repariert o Ich beschloss, mich durch einen leeren String zu schummeln. Möglicherweise mit negativen Auswirkungen, aber ich bemerkte, dass die Quelle ein paar Zeilen weiter dasselbe machte, also beschloss ich, es trotzdem auszuprobieren.

Ein weiterer Build Versuch, und jetzt bin ich immer undefinierte Referenzen für iconv Funktionen:

CMakeFiles/mariadb_obj.dir/ma_charset.c.o:ma_charset.c:function mariadb_convert_string: error: undefined reference to 'iconv_open' 
CMakeFiles/mariadb_obj.dir/ma_charset.c.o:ma_charset.c:function mariadb_convert_string: error: undefined reference to 'iconv' 
CMakeFiles/mariadb_obj.dir/ma_charset.c.o:ma_charset.c:function mariadb_convert_string: error: undefined reference to 'iconv_close' 
CMakeFiles/mariadb_obj.dir/ma_context.c.o:ma_context.c:function my_context_spawn_internal: error: undefined reference to 'setcontext' 
CMakeFiles/mariadb_obj.dir/ma_context.c.o:ma_context.c:function my_context_continue: error: undefined reference to 'swapcontext' 

Die Bibliotheken gibt es auf jeden Fall, wie oben definiert, in der Konfiguration. Vielleicht ist das ein Nebeneffekt des obigen Cheats?

Oder ist vielleicht etwas völlig falsch?

Noch einmal, eine komplette Neuigkeit in dieser Hinsicht, aber ich bekomme eine Neuigkeit, dass es etwas mit CMake zu tun haben könnte. Ist es möglicherweise die Host-Maschine cmake verwenden, aber sollte stattdessen ein "android toolchain" Cmake verwenden? Ich konnte auch nicht viele Informationen darüber finden, aber es könnte erklären, warum es nicht das program_invocation_short_name Ding und die Bibliotheken auswählt.

Also, irgendwelche Ideen was schief läuft und wie man es repariert?

Die Build-Env sollte durch die ersten paar Zeilen Code klar sein, aber nur für den Fall, es ist Ubuntu 16.04 x64, mit NDK r12b und der GCC 4.9 Toolchain. Ich benutze die folgenden Versionen der Bibliotheken: libiconv 1.15, openssl 1.1.0f und mariadb_connector_c 3.0.3.

Antwort

1

Momentan unterstützt MariaDB Connector/C kein Android NDK, dies ist für die kommende Version 3.0.3 geplant.

Um MariaDB Connector/C mit Android NDK zu erstellen, müssen Sie den 3.0-portable Zweig von MariaDB Connector/C auschecken.

Iconv-Unterstützung funktioniert derzeit nicht, dasselbe gilt für das Kerberos/GSSAPI-Authentifizierungs-Plugin.

Für den Bau MariaDB Connector/C mit Android NDK haben Sie zusätzlich die folgenden CMake Parameter angeben:

-DWITH_ICONV=OFF -DWITH_DYNCOL=OFF -DAUTH_GSSAPI_TYPE=OFF 

Wenn Sie SSL/TLS-Unterstützung nicht benötigen, können Sie es deaktivieren, indem

-DWITH_SSL=OFF 
Angabe
+0

Danke, ich werde das untersuchen. Es ist merkwürdig du, ich habe Schritt für Schritt verfolgt, wie man es baut, das ist wie 2 Jahre alt, und ich nehme an, es würde bauen, wenn jemand eine Anleitung dafür machte.Also vielleicht eine Regression? BTW verwende ich genau Version 3.0.3, also meinst du eine andere Version der gleichen Version oder was? – dtech

+0

Zuletzt veröffentlichte Version ist 3.0.2. Und nein, der Master-Zweig von github (3.0.3) wird nicht funktionieren, bis die 3.0-Portable-Fixes zusammengeführt sind. –