C++ 无法编译amqpcpp,发生错误
我在centos虚拟机上编译amqpcpp时遇到问题,但它在我的iMac上运行良好 当我运行make时,我收到以下错误: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(
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项目需要适当更新,以反映最新的变更。此修复程序适用于我需要的功能,您可能会发现其他一些功能已损坏
我个人决定使用选项一,现在它正按预期工作
谢谢谢谢。这个答案帮助了我