android+ndk+libevent,Cross Compiling libevent for Android

I'm stuck trying to cross-compile libevent to Android and I'd like to know what I'm doing wrong and get some assistance.

The version I'm trying to build is libevent-2.0.19-stable

I started following the steps described at http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ and how to rewrite the Makefile into android.mk?

The Target Device is a Samsung Galaxy S2 running cyanogenMod 7

After several attempts, the best I did was by running the following steps:

1) Install android NDK and download libevent source code

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

3) Execute:

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

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

You need to export the ABI for your device. armeabi-v7a is for devices with ARMv7 or above, any other device uses armeabi.

4) Execute ./configure with the appropriate parameters:

./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"

There was a warning in the meantime:

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

(I assume it's fine)

As it didn't recognise arm-linux-androideabi as a host, I got a new config.guess and config.sub from http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree (indicated in the previous thread in Stack Overflow)

At this point, when building the source code running "make", it still crashes:

/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

However, the file seems to be there:

~/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

Is there anything I'm doing wrong when running ./configure? Something else I didn't understand even looking at Android's NDK documentation was whether it was mandatory to create an Android.mk or if Makefile was sufficient

Any help will be very welcome!

Cheers

N

Note

This is how I managed to solve it in the end:

Initial PATH:

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/

The errors seem to occur in the linking phase so as it cannot find crtend_so.o and crtbegin_so.o. Following crtbegin_so.o missing for android toolchain (custom build), we add a sym link to them in the source folder

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

The ./configure command:

./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"

If it fails as it does not recognize system androideabi, try to get newer versions of config.sub and config.guess

It used to crash in the linking phase. Including -lgcc on the CFLAGS solved the issue.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值