首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用activemq和<mman.h>时编译错误

使用activemq和<mman.h>时编译错误
EN

Stack Overflow用户
提问于 2014-12-24 10:42:11
回答 1查看 382关注 0票数 0

在我的ubuntu系统上,我编写了使用activemqCPP3.6.0和mman.h编写的代码,并且存在一个棘手的编译错误。

我编写了一个非常简单的代码来验证这个问题:

代码语言:javascript
复制
  #include <sys/mman.h>
  #include <activemq/core/ActiveMQConnection.h>

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

下面是编译错误消息:

代码语言:javascript
复制
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===========================================上的======UPDATE

我对这个问题还有进一步的调查。在“bits/mmap.h”中:

代码语言:javascript
复制
# define MAP_TYPE   0x0f        /* Mask for type of mapping.  */ 

在“activemq/util/PrimediveValueNode.h”中:

代码语言:javascript
复制
enum PrimitiveType {
    ...,
    MAP_TYPE           = 11,
    ...
}

这就是冲突。因此,必须在"mman.h“之前包含”PrimediveValueNode.h“。

我认为这是一个典型的场景,可以说明为什么我们不应该在C/C++代码中使用#define。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-24 13:32:58

这很可能与某些定义或全局声明的冲突有关。如果在mman.h中定义了什么,并且在第二个标头中使用了相同的字符串/名称,则可能会导致这样的错误。由于编译单元是如何构建的,因此更改包含的顺序会有所帮助--问题的定义稍后才会出现。我遇到过很多这样的情况,但是头球不一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27635587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档