Cross Compiling libevent für Android
Ich versuche nicht, libevent für Android zu kompilieren, und ich möchte wissen, was ich falsch mache, und etwas Hilfe bekommen.
Die Version, die ich zu erstellen versuche, ist libevent-2.0.19-stable
Ich habe begonnen, die unter beschriebenen Schritte auszuführenhttp://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ undWie schreibe ich das Makefile in android.mk um?
Das Zielgerät ist ein Samsung Galaxy S2, auf dem CyanogenMod 7 ausgeführt wird
Nach mehreren Versuchen habe ich die folgenden Schritte ausgeführt:
1) Install android NDK and download libevent source code
2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b
3) Ausführen:
export ANDROID_ROOT=~/android-ndk/android-ndk-r8b
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
Sie müssen die ABI für Ihr Gerät exportieren. armeabi-v7a ist für Geräte mit ARMv7 oder höher vorgesehen. Jedes andere Gerät verwendet armeabi.
4) Führen Sie ./configure mit den entsprechenden Parametern aus:
./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"
In der Zwischenzeit gab es eine Warnung:
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
(Ich nehme an, es ist in Ordnung)
Da arm-linux-androideabi nicht als Host erkannt wurde, habe ich eine neue config.guess und config.sub von bekommenhttp://git.savannah.gnu.org/gitweb/?p=config.git;a=tree (angezeigt im vorherigen Thread in Stack Overflow)
Zu diesem Zeitpunkt stürzt der Quellcode, der "make" ausführt, immer noch ab:
/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
Die Datei scheint jedoch da zu sein:
~/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
Gibt es etwas, was ich beim Ausführen von ./configure falsch mache? Etwas anderes, das ich nicht einmal in der NDK-Dokumentation von Android verstanden habe, war, ob es obligatorisch ist, eine Android.mk zu erstellen oder ob Makefile ausreicht
Jede Hilfe wird sehr willkommen sein!
Prost
N
HinweisSo habe ich es am Ende geschafft:
Anfangsweg:
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/
Die Fehler scheinen in der Verbindungsphase aufzutreten, da crtend_so.o und crtbegin_so.o nicht gefunden werden können. Im Anschlusscrtbegin_so.o fehlt für Android-Toolchain (benutzerdefiniertes Build)fügen wir ihnen im Quellordner einen sym-Link hinzu
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
Der Befehl ./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"
Wenn es fehlschlägt, weil es das System androideabi nicht erkennt, versuchen Sie, neuere Versionen von config.sub und config.guess zu erhalten
Es stürzte in der Verbindungsphase ab. Die Aufnahme von -lgcc in die CFLAGS löste das Problem.