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

本文讲述了在使用arm-linux-androideabi-gcc编译libev库时遇到的fd_mask类型错误,通过发现Android宏未定义,介绍了如何在configure阶段和make阶段加入-DANDROID宏以解决编译问题。
摘要由CSDN通过智能技术生成

项目场景:

用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编译通过。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值