0

和标题说的差不多。我一直在尝试使用 MinGW 在 Windows 下构建 RabbitMQ,但没有成功。从我看到的询问如何使用它的问题来看,我怀疑我犯了一个愚蠢的错误,但我不知道它是什么。我在 Win7-64 上,我正在提取 repo,在其中创建一个构建目录,然后运行

cmake -G "MinGW Makefiles" ..

这似乎有效,然后

cmake --build .

这会引发一堆函数重新声明错误。有人知道我在这里搞砸了什么吗?

只是为了更好地衡量,错误的一小部分样本:

Linking C shared library librabbitmq.1.dll
CMakeFiles\rabbitmq.dir/objects.a(amqp_api.c.obj):amqp_api.c:(.rdata+0x3c): mult
iple definition of `amqp_empty_array'
CMakeFiles\rabbitmq.dir/objects.a(amqp_framing.c.obj):amqp_framing.c:(.bss+0x0):
 first defined here
CMakeFiles\rabbitmq.dir/objects.a(amqp_api.c.obj):amqp_api.c:(.rdata+0x44): mult
iple definition of `amqp_empty_table'
CMakeFiles\rabbitmq.dir/objects.a(amqp_framing.c.obj):amqp_framing.c:(.bss+0x8):
 first defined here
CMakeFiles\rabbitmq.dir/objects.a(amqp_api.c.obj):amqp_api.c:(.rdata+0x4c): mult
iple definition of `amqp_empty_bytes'
CMakeFiles\rabbitmq.dir/objects.a(amqp_framing.c.obj):amqp_framing.c:(.bss+0x10)
: first defined here
CMakeFiles\rabbitmq.dir/objects.a(amqp_connection.c.obj):amqp_connection.c:(.bss
+0x0): multiple definition of `amqp_empty_array'
CMakeFiles\rabbitmq.dir/objects.a(amqp_framing.c.obj):amqp_framing.c:(.bss+0x0):
 first defined here
CMakeFiles\rabbitmq.dir/objects.a(amqp_connection.c.obj):amqp_connection.c:(.bss
+0x8): multiple definition of `amqp_empty_table'
CMakeFiles\rlibrabbitmq\CMakeFiles\rabbitmq.dir\build.make:271: recipe for targe
t 'librabbitmq/librabbitmq.1.dll' failed

编辑: 一段时间后,我确定问题在于预处理器指令的编写方式存在一些错误。我现在不打算关闭它,如果我有时间修复整个事情,我会回到这里并留下一个解决方案的答案。

4

1 回答 1

0

我一直在分析 amqp.h 文件中定义的宏,并在构建非静态库时将 extern 修饰符添加到 AMQP_PUBLIC_VARIABLE 宏中。

 78 #elif defined(_WIN32) && defined(__MINGW32__)
 79 # if defined(AMQP_BUILD) && !defined(AMQP_STATIC)
 80 #  define AMQP_PUBLIC_FUNCTION __declspec(dllexport)
 81 #  define AMQP_PUBLIC_VARIABLE __declspec(dllexport) extern

另一件事是,我必须在 MinGW 环境中修改文件“/MinGW/include/windef.h”上的 WINVER 宏以适应新的 Windows 版本。

11 #ifndef WINVER
12 #define WINVER 0x0501

之后,我使用cmake -G "MinGW Makefiles".. &&cmake --build .命令构建了 librabbitmq.1.dll 库而没有问题

于 2013-05-10T12:12:33.273 回答