C++ 无法编译amqpcpp,发生错误

C++ 无法编译amqpcpp,发生错误,c++,makefile,amqp,C++,Makefile,Amqp,我在centos虚拟机上编译amqpcpp时遇到问题,但它在我的iMac上运行良好 当我运行make时,我收到以下错误: g++ -Wall -I/usr/local/include -L/usr/local/lib -Iinclude/ -c -o src/AMQPExchange.o src/AMQPExchange.cpp src/AMQPExchange.cpp: In member function ‘void AMQPExchange::sendDeclareCommand(

我在centos虚拟机上编译amqpcpp时遇到问题,但它在我的iMac上运行良好

当我运行make时,我收到以下错误:

g++  -Wall -I/usr/local/include -L/usr/local/lib -Iinclude/  -c -o src/AMQPExchange.o 
src/AMQPExchange.cpp src/AMQPExchange.cpp: In member function ‘void 
AMQPExchange::sendDeclareCommand()’: src/AMQPExchange.cpp:73: error: cannot convert ‘amqp_table_t’ 
to ‘amqp_boolean_t’ for argument ‘7’ to ‘amqp_exchange_declare_ok_t* 
amqp_exchange_declare(amqp_connection_state_t_*, amqp_channel_t,
amqp_bytes_t, amqp_bytes_t, amqp_boolean_t, amqp_boolean_t, amqp_boolean_t, amqp_boolean_t,
amqp_table_t)’

make: *** [src/AMQPExchange.o] Error 1

g++版本

g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
遗憾的是,我对C++的了解还不够,或者还没有完全理解这个问题。编译器似乎在抱怨代码中的类型转换样式转换,这让人困惑,因为它在mac上工作得很好

有什么想法吗

谢谢

编辑:我已经在两台机器上下载了amqpcpp的最新版本,并重新编译了它们,结果相同

编辑2:我意识到几个月前我在mac上安装了librabbitmq-c,我刚刚将其更新为最新版本,并且它与centos机器存在类似错误,amqpcpp似乎与librabbitmq代码库的最新更改不兼容。似乎这一特定的提交导致了以下问题:

我将尝试更新AmqpCpp代码库以应用修复程序,如果它有效,将发布一个链接以请求拉取。否则,在签出代码时使用早期提交应该允许它工作


谢谢

我终于找到了原因和2个(临时)解决方案

选项一。。在中断更改之前提取librabbitmq代码:

$ git clone https://github.com/alanxz/rabbitmq-c
$ cd rabbitmq-c/
$ git checkout e1746f92585d59364fc48b6305ce25d7fc86c2a4
然后按正常方式编译。我已经测试过这个方法,它对我来说很好。留意AMQPCpp github页面上的未来更新,以便知道何时可以安全地更新到最新版本

选择二。。更新AMQPCPP代码:

AMQPExchange.cpp:

取消第69行的评论,内容如下:

amqp_boolean_t autodelete = (parms & AMQP_AUTODELETE)   ? 1:0;
amqp_exchange_declare(*cnn, (amqp_channel_t) 1, exchange, exchangetype, passive, durable, autodelete, 0, args );
将第73行更改为:

amqp_boolean_t autodelete = (parms & AMQP_AUTODELETE)   ? 1:0;
amqp_exchange_declare(*cnn, (amqp_channel_t) 1, exchange, exchangetype, passive, durable, autodelete, 0, args );
然后您应该能够编译而不出错。注意:librabbitmq代码中的更改不仅仅是这个函数,这就是为什么我说这是一个临时修复。AMQPCpp项目需要适当更新,以反映最新的变更。此修复程序适用于我需要的功能,您可能会发现其他一些功能已损坏

我个人决定使用选项一,现在它正按预期工作


谢谢

谢谢。这个答案帮助了我