Ошибка сборки Veins 4.7 Omnet++ 5.3 в Windows 7

Я новичок в vein и omnet++. Я следовал этому руководству http://veins.car2x.org/tutorial/, все работает до шага 3, вен 4.7 почему-то не встраивается в omnet++ 5 (IDE) и выдает следующие ошибки.

veins/modules/utility/TimerManager.cc
In file included from veins/modules/utility/TimerManager.cc:20:
.\veins/modules/utility/TimerManager.h:137:26: error: expected identifier
  enum class StartMode { RELATIVE, ABSOLUTE, IMMEDIATE };
                         ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
In file included from veins/modules/utility/TimerManager.cc:20:
.\veins/modules/utility/TimerManager.h:137:36: error: expected identifier
  enum class StartMode { RELATIVE, ABSOLUTE, IMMEDIATE };
                                   ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
In file included from veins/modules/utility/TimerManager.cc:20:
.\veins/modules/utility/TimerManager.h:138:24: error: expected identifier
  enum class EndMode { RELATIVE, ABSOLUTE, REPITITION, OPEN };
                       ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
In file included from veins/modules/utility/TimerManager.cc:20:
.\veins/modules/utility/TimerManager.h:138:34: error: expected identifier
  enum class EndMode { RELATIVE, ABSOLUTE, REPITITION, OPEN };
                                 ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:42:28: error: expected unqualified-id
  start_mode_ = StartMode::RELATIVE;
                           ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
veins/modules/utility/TimerManager.cc:48:28: error: expected unqualified-id
  start_mode_ = StartMode::ABSOLUTE;
                           ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:54:24: error: expected unqualified-id
  end_mode_ = EndMode::RELATIVE;
                       ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
veins/modules/utility/TimerManager.cc:60:24: error: expected unqualified-id
  end_mode_ = EndMode::ABSOLUTE;
                       ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:86:19: error: expected unqualified-id
  case StartMode::RELATIVE:
                  ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
veins/modules/utility/TimerManager.cc:88:30: error: expected unqualified-id
    start_mode_ = StartMode::ABSOLUTE;
                             ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:90:19: error: expected unqualified-id
  case StartMode::ABSOLUTE:
                  ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:98:17: error: expected unqualified-id
  case EndMode::RELATIVE:
                ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1434:18: note: expanded from macro 'RELATIVE'
#define RELATIVE 2
                 ^
veins/modules/utility/TimerManager.cc:100:26: error: expected unqualified-id
    end_mode_ = EndMode::ABSOLUTE;
                         ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:102:17: error: expected unqualified-id
  case EndMode::ABSOLUTE:
                ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
veins/modules/utility/TimerManager.cc:106:26: error: expected unqualified-id
    end_mode_ = EndMode::ABSOLUTE;
                         ^
C:\Users\Abu\src\omnetpp-5.3\tools\win64\mingw64\x86_64-w64-mingw32\include\wingdi.h:1433:18: note: expanded from macro 'ABSOLUTE'
#define ABSOLUTE 1
                 ^
15 errors generated.
make[1]: *** [Makefile:205: ../out/clang-debug/src/veins/modules/utility/TimerManager.o] Error 1
make[1]: Leaving directory '/c/Users/Abu/src/veins-4.7/src'
make: *** [Makefile:12: all] Error 2

Я также использую sumo_win64_0.32.0. Я не уверен, что вызывает эти ошибки.

Любая помощь приветствуется.


person Abubakar Saad    schedule 03.06.2018    source источник
comment
Похоже, что Veins 4.7 не совместим с Windows. Не могли бы вы вместо этого попробовать Veins 4.6?   -  person Christoph Sommer    schedule 03.06.2018
comment
@ChristophSommer - Спасибо за ответ. Veins 4.6 строится без ошибок. Спасибо. :)   -  person Abubakar Saad    schedule 03.06.2018
comment
@ChristophSommer - Но теперь на последнем шаге руководства я получаю следующую ошибку, упомянутую в этой ссылке stackoverflow.com/questions/49967052/   -  person Abubakar Saad    schedule 03.06.2018
comment
Ага. Для этой версии Veins требуется более старая версия OMNeT++. Извини за это!   -  person Christoph Sommer    schedule 03.06.2018
comment
Хорошо, я попробую это. Спасибо еще раз.   -  person Abubakar Saad    schedule 03.06.2018
comment
@ChristophSommer - Спасибо, теперь все работает.   -  person Abubakar Saad    schedule 04.06.2018
comment
Исправление объединено в Veins 4.7.1   -  person Christoph Sommer    schedule 05.06.2018


Ответы (3)


Проблема была исправлена ​​в этом запросе на включение и в новой незначительной версии Veins (т. Выпущена Veins 4.7.1). Загрузите новую версию, чтобы получить исправление, а также некоторые дополнительные улучшения.

person Julian Heinovski    schedule 05.06.2018

Я только что столкнулся с этой ошибкой, и вот что происходит:

Компилятор не может разрешить определения enum class в TimerManager.h из-за неоднозначности имени с макросами RELATIVE и ABSOLUTE в wingdi.h.

enum class StartMode { RELATIVE, ABSOLUTE, IMMEDIATE };

enum class EndMode { RELATIVE, ABSOLUTE, REPITITION, OPEN };

Быстрое решение состоит в том, чтобы переименовать вхождения в TimerManager.h и TimerManager.cc на что-то другое. Например. Замените все вхождения RELATIVE на RELATIVEINS и ABSOLUTE на ABSOLUTEVEINS и т. д. (или что угодно). У меня отлично работало с 4.7 и OMNet++ 5.2.1.

person Thomas Weber    schedule 04.06.2018
comment
Альтернативой редактированию кода является передача NOGDI препроцессору, что предотвращает выполнение конфликтующих определений. См. github.com/sommer/veins/issues/68. - person Horstinator; 04.06.2018

Для компиляции Veins 4.7 с OMNeT++ 5.3 для Windows требуется патч. Самый чистый способ может быть чем-то вроде https://pastebin.com/ymzqMpEF.

- enum class StartMode { RELATIVE, ABSOLUTE, IMMEDIATE }
+ enum class StartMode { relative, absolute, immediate }

то есть переименовать все константы enum class в верхнем регистре в строчные (что также рекомендуется многими стилями кодирования).

person user9893623    schedule 04.06.2018