首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称空间冲突libcrafter/Pcap++

名称空间冲突libcrafter/Pcap++
EN

Stack Overflow用户
提问于 2015-09-01 07:13:01
回答 2查看 399关注 0票数 0

我试图做一个自制的系统来交换数据包,特别是在第二层,上面没有任何东西,在CentOS上.

我使用

  • 构建数据包的利布匠
  • pcap++用于嗅探数据包
  • (crypto++以确保此问题的最小安全关闭主题)

问题是,当我的程序接收和发送数据包(因此使用pcap++和libcrafter)时,与类Packet (在libcrafterPcap++中都定义)存在冲突.

这是我的标题:

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include <getopt.h>
#include <stdlib.h>
#include <fstream>
#include <memory>
#include <pthread.h>
#include <errno.h>
#include <vector>
#include <string>
#include <sstream>
/**** LIBCRAFTER ******/
#include <MacAddress.h>
#include <IpAddress.h>
#include <PlatformSpecificUtils.h>
#include <PcapLiveDeviceList.h>
#include <PcapLiveDevice.h>
#include <EthLayer.h>
#include <PayloadLayer.h>
#include <Logger.h>
#include <in.h>
#include <PointerVector.h>
#include <crafter.h>
using namespace Crafter;
using namespace std;

这是我的第一个错误:

代码语言:javascript
复制
server_resp.cpp: In function ‘int main(int, char**)’:
server_resp.cpp:74:3: error: reference to ‘Packet’ is ambiguous
   Packet pack_decod(capturedPackets.getAndRemoveFromVector(position));
   ^
In file included from /home/myself/Downloads/PcapPlusPlus-master/Dist/header/PcapLiveDevice.h:9:0,
                 from /home/myself/Downloads/PcapPlusPlus-master/Dist/header/PcapLiveDeviceList.h:5,
                 from server_resp.cpp:16:
/home/myself/Downloads/PcapPlusPlus-master/Dist/header/Packet.h:19:7: note: candidates are: class Packet
 class Packet {
       ^
In file included from /usr/local/include/crafter/Crafter.h:104:0,
                 from /usr/local/include/crafter.h:33,
                 from server_resp.cpp:23:
/usr/local/include/crafter/Packet.h:44:8: note:                 class Crafter::Packet
  class Packet {
        ^

我可以提供一个MME,但它很长(150行),我想保持简单的问题.

编辑:我还遇到了Ethernet类的问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-01 10:18:43

在名称冲突这样的情况下,您实际上只能做两件事:

  1. 更改源代码并将库包装在自己的命名空间中。这样你就可以做些像Crafter::Packet这样的事情了。
  • 或者-
  1. 您可以将这两个包中的一个重命名为一个独特的包。它还意味着将所有引用更改为库本身中的新数据包名。

我倾向于将库包装在它自己的名称空间中。因为这是最不费劲的事。

最后,我建议对此进行修补,并将其邮寄给库的作者。这可能不是第一次发生,也不会是最后一次。

票数 1
EN

Stack Overflow用户

发布于 2017-06-23 23:01:53

请注意,现在PcapPlusPlus有了自己的名称空间(pcpp),因此这些冲突不应该再发生了。

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

https://stackoverflow.com/questions/32325639

复制
相关文章

相似问题

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