c++ - 无法编译amqpcpp,Make错误

标签 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()’: 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

Github Issue Url

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 代码库以应用修复程序,如果有效,将发布拉取请求的链接。否则,在 checkout 代码时使用较早的提交应该可以使其正常工作。

谢谢

最佳答案

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

选项一..在重大更改之前提取 librabbitmq 代码:

$ git clone https://github.com/alanxz/rabbitmq-c
$ cd rabbitmq-c/
$ git checkout e1746f92585d59364fc48b6305ce25d7fc86c2a4

然后正常编译。我已经测试过这个方法,它对我来说效果很好。请密切关注 AMQPCpp github 页面上的 future 更新,以便您知道何时可以安全更新到最新版本。

选项二..更新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 项目需要正确更新以反射(reflect)最新的更改。此修复程序可以满足我的需要,您可能会发现其他一些功能已损坏。

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

谢谢

关于c++ - 无法编译amqpcpp,Make错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26703443/

相关文章:

c++ - 函数原型(prototype)的返回值

linux - 如何在Makefile中测试CFLAGS中是否加入了某个符号?

php - 在 Linux 上安装 PHP SVN 扩展时出错

c++ - makefile文件名参数

c++ - Rabbitmq 与 Apache QPID

c++ - 如何以二进制模式读取并将信息传输到新文件

c++ - Visual C++ Express 2010 突然不接受#includes

node.js - RabbitMQ 与重新连接

来自 Vertx 和 AMQPBridge 的 Java 运行时警告

c++ - "PVOID"与类型为 "LPCTSTR"的参数不兼容