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
- XCode下编译RabbitMQ无法通过问题的解决方式
- 解决win8下的 C-Free5无法编译问题
- 解决XCode无法生成Archive的问题
- 解决XCode无法生成Archive的问题
- 在命令行下编译通过,运行时提示错误:找不到或无法加载主类的原因分析与解决方式
- 解决 gcc/g++ 编译动态库通过却无法运行的问题
- 解决VS2012/VS2013/VS2015下编译的程序无法在XP下运行的问题
- 解决VS2012/VS2013/VS2015下编译的程序无法在XP下运行的问题
- 解决Eclipse无法正常编译的问题
- Xcode无法安装基于ruby的插件问题的解决
- Linux下RabbitMQ的编译
- 解决linux下tomcat8上传图片other用户无法通过Nginx查看的问题
- 解决linux下tomcat8上传图片无法通过Nginx查看的问题
- 解决linux下tomcat8.5上传图片other用户无法通过Nginx查看的问题
- WCF Host通过编译但是无法使用的解决之一
- 解决第三方类库无法通过armv7s编译的方法
- MySQL数据库无法通过 utf8mb4 连接的解决方式
- 在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式
- Light OJ 1341 Aladdin and the Flying Carpet Pollard_rho整数分解+DFS
- 使用Jedis操作redis
- 在网络推广上面说网站不好网站不好该如何去做好推广
- c#点线面(非继承)
- 黑马程序员——OC总结
- XCode下编译RabbitMQ无法通过问题的解决方式
- V4L2驱动架构
- ubuntu安装配置mysql
- 第七周项目1 求串联电阻阻值
- 在网络推广上面说网站不好网站不好该如何去做好推广
- Joseph环-指针数组法
- KVO(NSKeyValueObserving 的简称)、KVC(NSKeyValueCoding 的简称)
- (java性能分析工具之yourkit) yourkit--性能分析软件之入门介绍
- 在网络推广上面说网站不好网站不好该如何去做好推广