交叉编译的libevent为Android(Cross Compiling libevent for

2019-07-30 15:07发布

我坚持试图交叉编译libevent的Android和我想知道我做错了,并得到一些帮助。

我试图构建的版本是libevent的-2.0.19稳定

我开始在下面描述的步骤http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/以及如何Makefile文件改写成android.mk?

该目标设备是三星Galaxy S2运行的CyanogenMod 7

经过多次尝试之后,我做了最好的是通过运行以下步骤:

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=树 (在堆栈溢出前一个线程表示)

在这一点上,构建源代码运行“做”的时候,它仍然崩溃:

/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文件就足够了

任何帮助将是非常欢迎!

干杯

ñ

注意

这是我设法解决它到底:

初始路径:

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发生在链接阶段。 继crtbegin_so.o失踪的Android工具链(定制) ,我们在源文件夹中添加一个符号链接到他们

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解决的问题。

Answer 1:

试试这个

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

这个对我有用。



Answer 2:

该项目建立了libevent在Android上进行静态库的位置: https://github.com/ventureresearch/libevent

它包括Android.mk和生成的配置文件,以干净构建它。

请注意,我们正在建设我们将其纳入到Android设备的图像,并通过NDK不兴建。 它很可能仍然是一个良好的开端。



Answer 3:

试试下面的配置:

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

./configure --host=arm-linux-androideabi CFLAGS=--sysroot=$ANDROID_SYSROOT LDFLAGS=--sysroot=$ANDROID_SYSROOT


文章来源: Cross Compiling libevent for Android