Как решить конфликт libzmq с windows.h - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над большим проектом, который нуждается в 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 куда угодно>

...