使用MinGW在Windows上构建RabbitMQ-C

时间:2013-03-20 20:39:09

标签: c mingw rabbitmq

相当于标题所说的内容。我一直在尝试使用MinGW在Windows下构建RabbitMQ但没有成功。从我看到询问如何使用它的人数来判断,我怀疑我犯了一个愚蠢的错误,但我不知道它是什么。我在Win7-64上,我正在提取存储库,在其中创建一个构建目录,然后运行

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

修改 过了一段时间,我已经确定问题是预处理器指令在写入方式上有一些错误。我暂时不打算关闭这个,如果我有时间解决这个问题,我会回到这里并给出一个解决方案。

1 个答案:

答案 0 :(得分: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"创建了librabbitmq.1.dll库而没有问题。&& cmake --build .个命令