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.
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
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. –