XCode下编译RabbitMQ无法通过问题的解决方式

来源:互联网 发布:文华财经海龟策略源码 编辑:程序博客网 时间:2024/05/04 21:31

项目中在iOS下用到了RabbitMQ,用于处理消息通讯相关的问题,在XCode 5.1.1下,编译正常,但XCode升到6之后,编译失败,报错位置为:

amqp_private.h:


DECLARE_XTOXLL(hton)
DECLARE_XTOXLL(ntoh)

出错信息:

Semantic issue: Expected ')'
Parse issue: Definition of builtin function '__builtin_constant_p'

通过对宏DECLARE_XTOXLL的观察看,是为了在系统没有定义htonll和ntohll函数时,进行预定义。系统函数已有定义,所以出现了冲突。

继续细查至Yosemite系统的/usr/include/sys/_endian.h中,发现如下定义:

#define ntohll(x) ((__uint64_t)(x))
#define htonll(x) ((__uint64_t)(x))

而这个定义是在Maverick时不存在的。应该有几个主要的开源软件都存在这个问题(rabbitmq, mongoDB等)。

解决方法:

方法1. 直接的解决方法,加入HAVE_HTONLL的定义,使用系统的函数定义。但这样的话,代码无法在各系统中适配。

amqp_config.h:

#define HAVE_HTONLL 1

方法2. 每个工程在导入到项目时,需要重新configure一次,这样就可以按实际编译环境判断是否与某系统函数冲突,可以确保在各种系统平台下都可以编译通过。这种问题的产生都源于代码产生与维护的不规范,造成的结果就是在不同环境下break build。

虽然方法2解决更彻底一些,不过涉及到诸多因素考虑,故目前使用quick fix方法1解决,编译通过,运行正常。

转载请注明来源自: www.candylog.com

0 0