5

libevent を Android にクロスコンパイルしようとして立ち往生しています。どこが間違っているのかを知りたいのですが、助けが必要です。

ビルドしようとしているバージョンは libevent-2.0.19-stable です

http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/で説明されている手順に従い始め、Makefile を android.mk に書き換える方法を教えてください。

ターゲット デバイスは、cyanogenMod 7 を実行する Samsung Galaxy S2 です。

何度か試行した後、次の手順を実行するのが最善でした。

1) Install android NDK and download libevent source code

2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b

3) 実行:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b

export    PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/

デバイスの ABI をエクスポートする必要があります。armeabi-v7a は ARMv7 以降のデバイス用で、他のデバイスは armeabi を使用します。

4) 適切なパラメーターを使用して ./configure を実行します。

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

その間、次のような警告がありました。

configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used

(大丈夫だと思います)

arm-linux-androideabi をホストとして認識しなかったため、新しい config.guess と config.sub をhttp://git.savannah.gnu.org/gitweb/?p=config.git;a=から取得しました。ツリー(スタック オーバーフローの前のスレッドに示されています)

この時点で、「make」を実行してソース コードをビルドすると、まだクラッシュします。

/home/narseo/android-ndk/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_so.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libevent.la] Error 1
make[2]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make: *** [all] Error 2

ただし、ファイルはそこにあるようです:

~/android-ndk$ ls $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib
crtbegin_dynamic.o  libc.a           libjnigraphics.so  libstdc++.so
crtbegin_so.o       libc.so          liblog.so          libthread_db.so
crtbegin_static.o   libdl.so         libm.a             libz.so
crtend_android.o    libGLESv1_CM.so  libm.so
crtend_so.o         libGLESv2.so     libstdc++.a

./configure の実行時に間違っていることはありますか? Android の NDK ドキュメントを見ても理解できなかったその他のことは、Android.mk の作成が必須か、それとも Makefile で十分かということでした。

どんな助けでも大歓迎です!

乾杯

N

ノート

これは私が最終的にそれを解決する方法です:

初期パス:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/include/

crtend_so.o と crtbegin_so.o が見つからないため、リンク フェーズでエラーが発生したようです。Android ツールチェーン (カスタム ビルド) の crtbegin_so.o の欠落に続いて、ソース フォルダーにそれらへのシンボリック リンクを追加します。

cd source && ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.o 
ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.o 

./configure コマンド:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

システム androideabi を認識しないために失敗する場合は、新しいバージョンの config.sub と config.guess を取得してみてください

リンク段階でクラッシュしていました。CFLAGS に -lgcc を含めることで問題が解決しました。

4

3 に答える 3

6

このプロジェクトは、Android のスタティック ライブラリとして libevent をビルドします: https://github.com/ventureresearch/libevent

Android.mk と生成された構成ファイルが含まれており、クリーンにビルドできます。

これは、Android デバイス イメージに含めるためにビルドするものであり、NDK を介してビルドするものではないことに注意してください。それはおそらくまだ始めるのに良い場所でしょう。

于 2012-11-02T17:04:01.873 に答える
4

これを試して

./configure --host=arm-linux-androideabi CC="$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT" CFLAGS='-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16'

わたしにはできる。

于 2012-12-04T19:37:50.347 に答える
4

以下の構成で試してください。

ANDROID_SYSROOT=$ANDROID_ROOT/platforms/android-8/arch-arm/

./configure --host=arm-linux-androideabi CFLAGS=--sysroot=$ANDROID_SYSROOT LDFLAGS=--sysroot=$ANDROID_SYSROOT
于 2012-11-06T11:54:08.397 に答える