我在centos虚拟机上编译amqpcpp时出现问题,但它在我的iMac上运行正常。
当我正在运行时,我收到此错误:
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代码库的最新更改不兼容。似乎这个特定的提交导致了这个问题:
Commit 2340b039f029f3b8101a164d3bcd547be1106906
我将尝试更新AmqpCpp代码库以应用修复,如果有效,将发布拉取请求的链接。否则,在签出代码时使用先前的提交应该允许它工作。
由于
答案 0 :(得分:2)
我终于找到了原因和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;
更改第73行,使其显示为:
amqp_exchange_declare(*cnn, (amqp_channel_t) 1, exchange, exchangetype, passive, durable, autodelete, 0, args );
然后你应该能够编译没有错误。请注意:librabbitmq代码中的更改比此函数更多,这就是为什么我说这是一个临时修复。 AMQPCpp项目需要正确更新以反映最新的变化。此修复程序适用于我需要它,您可能会发现其他一些功能已被破坏。
我个人决定使用Option One,它现在按预期工作。
谢谢