Nar*_*seo 5 android cross-compiling libevent
我一直试图将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的三星Galaxy S2
经过多次尝试,我做的最好的是运行以下步骤:
1) Install android NDK and download libevent source code
2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b
Run Code Online (Sandbox Code Playgroud)
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/
Run Code Online (Sandbox Code Playgroud)
您需要导出设备的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"
Run Code Online (Sandbox Code Playgroud)
在此期间发出警告:
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
Run Code Online (Sandbox Code Playgroud)
(我认为没关系)
由于它没有将arm-linux-androideabi识别为主机,因此我从http://git.savannah.gnu.org/gitweb/?p=config.git ; a=获得了一个新的config.guess和config.sub.树(在Stack Overflow中的前一个线程中指示)
此时,在构建运行"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
Run Code Online (Sandbox Code Playgroud)
但是,该文件似乎在那里:
~/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
Run Code Online (Sandbox Code Playgroud)
运行./configure时有什么问题吗?甚至在查看Android的NDK文档时我还不明白的是,是否必须创建Android.mk或Makefile是否足够
我们非常欢迎任何帮助!
干杯
ñ
这就是我最终设法解决它的方法:
初始路径:
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/
Run Code Online (Sandbox Code Playgroud)
错误似乎发生在链接阶段,因为它找不到crtend_so.o和crtbegin_so.o.在android工具链(自定义构建)缺少crtbegin_so.o之后,我们在源文件夹中添加了一个sym链接
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
Run Code Online (Sandbox Code Playgroud)
./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"
Run Code Online (Sandbox Code Playgroud)
如果它因为无法识别system androideabi而失败,请尝试获取较新版本的config.sub和config.guess
它曾经在链接阶段崩溃.在CFLAGS上包含-lgcc解决了这个问题.
小智 6
该项目建立了libevent在Android上进行静态库的位置:https://github.com/ventureresearch/libevent
它包括Android.mk和生成的配置文件,以干净构建它.
请注意,我们正在构建它以包含在Android设备映像中,而不是通过NDK构建.它可能仍然是一个很好的起点.
尝试这个
./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'
Run Code Online (Sandbox Code Playgroud)
这个对我有用。
归档时间: |
|
查看次数: |
13422 次 |
最近记录: |