相当于标题所说的内容。我一直在尝试使用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
修改 过了一段时间,我已经确定问题是预处理器指令在写入方式上有一些错误。我暂时不打算关闭这个,如果我有时间解决这个问题,我会回到这里并给出一个解决方案。
答案 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 .
个命令