Ошибка компиляции при использовании activemq и & lt; mman.h & gt;

В моей системе Ubuntu я пишу код, который использует activemq-cpp 3.6.0 и mman.h, и возникает сложная ошибка компиляции.

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

  #include <sys/mman.h>
#include <activemq/core/ActiveMQConnection.h>

int main(int argc, char** argv)
{
return 0;
}

А вот и сообщение об ошибке компиляции:

g++ -c -O2 -D_INTEL686 -D_LINUX -I. -I.. -I/home/matt/devspace/trading-apps/../trading-dependency/activemq-cpp/include/activemq-cpp-3.6.0 -I/home/matt/devspace/trading-apps/../trading-dependency/apr/include/apr-1  mqtest.cpp -o mqtest.o
In file included from /usr/include/x86_64-linux-gnu/sys/mman.h:41:0,
from mqtest.cpp:2:
/home/matt/devspace/trading-apps/../trading-dependency/activemq-cpp/include/activemq-cpp-3.6.0/activemq/util/PrimitiveValueNode.h:56:13: error: expected identifier before numeric constant
MAP_TYPE           = 11,

Если я добавлю mman.h после activemq / core / ActiveMQConnection.h, все будет в порядке.
У кого-нибудь есть такая же проблема?

====== ОБНОВЛЕНИЕ 2015/1/7 ========================================== ======

У меня есть дальнейшее расследование по этому вопросу.
В «bits / mmap.h»:

# define MAP_TYPE   0x0f        /* Mask for type of mapping.  */

В «activemq / util / PrimitiveValueNode.h»:

enum PrimitiveType {
...,
MAP_TYPE           = 11,
...
}

Здесь конфликт. Таким образом, «PrimitiveValueNode.h» должен быть включен до «mman.h».

Я думаю, что это типичный сценарий, показывающий, почему мы НЕ ДОЛЖНЫ использовать #define в коде C / C ++.

0

Решение

Скорее всего, это связано с конфликтом некоторых определений или глобальной декларацией. Если что-то было определено в mman.h и та же строка / имя использовалась позже во втором заголовке, это может вызвать такую ​​ошибку. Изменение порядка включения помогает из-за способа построения модуля компиляции — проблематичное определение будет позже. У меня была такая ситуация много раз, но с разными заголовками.

0

Другие решения


По вопросам рекламы [email protected]