さらに別の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_name
がthis 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のライブラリの次のバージョンを使用しています。
ありがとう、私はこれを調べます。それは奇妙なことです、私は2歳のようにそれを構築する方法を段階的に追ってきました、そして、誰かがそれをガイドしたならば、それは構築していたと思います。だから多分回帰?私はちょうどバージョン3.0.3を使用しているので、あなたは同じバージョンの別のリリースを意味するのでしょうか? – dtech
最新リリースバージョンは3.0.2です。また、github(3.0.3)のマスターブランチは、移植可能な3.0の修正がマージされるまで動作しません。 –