2017-09-04 15 views
0

さらに別のlinuxビルドでは、NDKを使ってAndroid用mariadb-clientを構築するのに苦労しています。Androidでmariadbクライアントを構築するNDK

私はすでに正常のperquisitesあるのopensslとlibiconvをし、構築しています。

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 

を、それは、より読みやすいように、その最後の部分を打破するには:私が得た最初のエラーがprogram_invocation_short_namethis bit of codeで未定義たということでした

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 

ここ

は私がやっているものです。

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

これはどのように修正するのですか? o空の文字列を割り当てて自分のやり方を欺くことに決めました。恐らく負の影響を与えているかもしれませんが、私は同じことを数行続けているソースに気づいたので、それでもやってみましょう。 iconv機能のための

別のビルドを試み、そして今私は取得しています未定義の参照:上記の設定で定義されているよう

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' 

ライブラリは、間違いなくあります。多分それは上記の不正行為の副作用ですか?

多分何かが間違っていますか?

もう一度、この点で完全な初心者くさい、私はそれはcmakeのとは何かを持っていることが初心者くさい予感を取得します。おそらくホストマシンcmakeを使用していますか?代わりに、いくつかの "android toolchain" cmakeを使用する必要がありますか?私はそれについて多くの情報を見つけることができませんでしたが、それはprogram_invocation_short_nameの事物とlibsを選んでいない理由を説明することができます。

だから、どのようなアイデアが間違っていて、どのように修正するのですか?

build envはコードの最初の数行ではっきりしているはずですが、NDK r12bとGCC 4.9ツールチェーンを使用するUbuntu 16.04 x64です。 libiconv 1.15、openssl 1.1.0fおよびmariadb_connector_c 3.0.3のライブラリの次のバージョンを使用しています。

答えて

1

現在MariaDBコネクタ/ Cは、Android NDKをサポートしていません、これは今後の3.0.3のリリースを予定しています。 AndroidのNDKとMariaDBコネクタ/ Cを構築するには

あなたはMariaDBコネクタ/ Cの3.0-portableブランチをチェックアウトする必要があります。同じ

のiconvサポートは現在動作しません

は、ケルベロス/ GSSAPI認証プラグインのために有効です。

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

あなたはSSL/TLSのサポートを必要としない場合、あなたは

-DWITH_SSL=OFF 
を指定して、それを無効にすることができます:あなたはさらに以下CMakeのパラメータを指定しているAndroidのNDKとMariaDBコネクタ/ Cを構築するための

+0

ありがとう、私はこれを調べます。それは奇妙なことです、私は2歳のようにそれを構築する方法を段階的に追ってきました、そして、誰かがそれをガイドしたならば、それは構築していたと思います。だから多分回帰?私はちょうどバージョン3.0.3を使用しているので、あなたは同じバージョンの別のリリースを意味するのでしょうか? – dtech

+0

最新リリースバージョンは3.0.2です。また、github(3.0.3)のマスターブランチは、移植可能な3.0の修正がマージされるまで動作しません。 –

関連する問題