当前位置: 首页 > 工具软件 > libev > 使用案例 >

Android交叉编译libev报错问题分析

龚承嗣
2023-12-01

项目场景:

用arm-linux-androideabi-gcc编译libev-4.24


问题描述

按照通用步骤:

./configure --host=arm-linux CC=arm-linux-androideabi-gcc --prefix=/mnt/share/lib

make

得到目标lib;

不行。

报错:找不到类型 fd_mask;

报错log:

[08:56:46]In file included from ev.c:2708:0:
[08:56:46]ev_select.c: In function 'select_modify':
[08:56:46]ev_select.c:109:5: error: unknown type name 'fd_mask'
[08:56:46]     fd_mask mask = 1UL << (fd % NFDBITS);
[08:56:46]     ^
[08:56:46]ev_select.c:124:13: error: 'fd_mask' undeclared (first use in this function)
[08:56:46]           ((fd_mask *)vec_ri) [vec_max] =
[08:56:46]             ^

原因分析:

查看源码:

#ifdef ANDROID
/* supposedly, android doesn't typedef fd_mask */
# undef EV_USE_SELECT
# define EV_USE_SELECT 0
/* supposedly, we need to include syscall.h, not sys/syscall.h, so just disable */
# undef EV_USE_CLOCK_SYSCALL
# define EV_USE_CLOCK_SYSCALL 0
#endif

需要定义ANDROID宏。。。。。

解决方案:

我不知道如何在./configure时候加入宏定义;
也不知道make时候怎么添加宏定义;

但我知道gcc时候可以-D指定编译宏。
所以打开生成的Makefile

CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H -DANDROID
DEPDIR = .deps
DLLTOOL = false
DSYMUTIL = 
DUMPBIN = 

在DEFS 参数后面添加-DANDROID编译通过。

各位兄弟,如果你有更好办法麻烦提供下。

 类似资料: