如何使用windows.h解决libzmq冲突

时间:2018-12-12 07:35:41

标签: windows macros zeromq

我正在一个需要libzmq的大项目中,并且猜测应该在Windows.h中处理一些宏。

以下是测试代码:

cmake_minimum_required(VERSION 2.8.12)

project(qt_compiler_error)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

include_directories(C:/code/libzmq/include)
link_directories(C:/code/libzmq/lib)

find_package(Qt5Core)

add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} libzmq-v141-mt-4_3_0)

main.cpp:

#include <QCoreApplication>

#include <zmq.hpp>
#include <Windows.h>
#undef near
#undef far

#include <iostream>

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  std::cout << "hello\n";
  // sleep(1);
  return a.exec();
}

这样,代码可以很好地编译。但是,如果将#include <zmq.hpp>移动到#undef far之后的行,则会在编译中发生很多错误:

1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(103): warning C4005: 'AF_IPX': macro redefinition
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h(457): note: see previous definition of 'AF_IPX'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(147): warning C4005: 'AF_MAX': macro redefinition
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h(476): note: see previous definition of 'AF_MAX'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(185): warning C4005: 'SO_DONTLINGER': macro redefinition
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h(399): note: see previous definition of 'SO_DONTLINGER'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(235): error C2011: 'sockaddr': 'struct' type redefinition
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h(1007): note: see declaration of 'sockaddr'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(274): error C2143: syntax error: missing ';' before '*'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(274): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(292): error C2143: syntax error: missing ';' before '*'
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h(292): error C2371: 'far': redefinition; different basic types

因此Windows.h中必须有某些内容。我想在需要的任何地方导入zmq.hpp怎么办>

0 个答案:

没有答案