VS2015编译SNMP++源码

1 篇文章 0 订阅
  • 下载SNMP++开发包,官网地址:http://www.agentpp.com/,目前最新的版本为snmp++-3.4.5.tar.gz,如果需要支持V3版本的数据传输功能,还需要下载libdes,目前的版本为libdes-l-4.01a.tar.gz。还要下载MS VC++12 Project Files for SNMP++,因为源码中没有项目文件。

  • 将下载的三个压缩包解压之后的文件夹放在同级目录下,同时将snmp++-3.4.5重命名为snmp++,将vs2013重新命名为vs2015

  • 在vs2015文件夹中有四个文件夹,其中需要用到的就两个libdes和SNMP++,可以删掉AGENT++和AgentX++。

  • 进入.\vs2015\libdes文件夹中,双击libdes.sln文件,默认自己会加载对应的.h头文件和.c源文件,

  • 直接右键项目名,开始build,编译成功

  • 会在debug文件夹下生成对应的libdes.lib库文件。

  • 同时还可以生成release版本的libdes.lib库文件

  • 用..\vs2015\SNMP++\include\snmp_pp\config_snmp_pp.h替换掉..\snmp++\include\snmp_pp\config_snmp_pp.h同名文件,替换的原因在./vs2015目录下的README.win32文件中有说明
  • 进入./vs2015/SNMP++路径下,双击SNMP++.sln文件,打开工程。
  • 右键项目名“SNMP++”,开始Build,会产生如下错误,

  • 缺少的头文件libsnmp.h文件在.\vs2015\SNMP++\include目录下,右键工程名打开属性对话框,将此目录添加到Include Directories中,

可以发现,在打开的Include Directories对话框中,配置路径有问题, 根据自己项目的情况配置正确的路径,

此处依然使用的是绝对路径,如果熟悉【$(SolutionDir)】的用法的化,也可以使用相对路径替代。

  • 右键项目名,重新Build,发现生成如下错误,

1)关于pp_int64的错误,出现在usm_v3.cpp文件中,可以换成int64_t,

这种修改是否会产生其它问题,目前尚不知晓。

2)use inet_pton() or InetPton() instead…错误,按照错误提示,在工程属性C/C++->预处理器中添加_WINSOCK_DEPRECATED_NO_WARNINGS

  • 然后重新Build,此时即可编译成功,

成功后会在Debug路径下生成SNMP++.lib库文件。

  • 新建测试项目

新建win32控制台应用程序TestSNMP

为了方便引用头文件和lib库,新建文件夹SNMPLIB,将./snmp++/include/snmp_pp整个文件夹及其内容拷贝到./SNMPLIB目录下。同时将./libdes中的头文件也拷贝到./SNMPLIB路径下,最后将libdes.lib和SNMP++.lib两个库文件也拷贝到./SNMPLIB路径下。

  • 设置TestSNMP属性的包含路径和库路径

  • 在项目属性中的连接器的input属性中输入lib库的文件名

测试程序源码如下,

#include <iostream>

#include "snmp_pp/snmp_pp.h"

 

using namespace std;

using namespace Snmp_pp;

 

#define SYSDESCR "1.3.6.1.2.1.1.1.0"    //Object ID for System Descriptor

 

void get_system_descriptor()

{

    Snmp::socket_startup();

    int status; //返回状态

    CTarget ctarget((IpAddress)"127.0.0.1");

    Vb vb(SYSDESCR);    //SNMP++变量绑定

    Pdu pdu;    //SNMP++ pdu

    //构造SNMP对象

    Snmp snmp(status); 

    //创建SNMP session

    if (status != SNMP_CLASS_SUCCESS)

    {

        cout << snmp.error_msg(status);

        return;

    }

    //

    pdu += vb;  //绑定变量

    if ((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)

    {

        cout << snmp.error_msg(status);

    }

    else

    {

        pdu.get_vb(vb, 0);  //

        cout << "System Descriptor = " << vb.get_printable_value();

    }

    Snmp::socket_cleanup();

}

int main()

{

    get_system_descriptor();

    return 0;

}

编译运行,结果如下,

 

 

参考来源:

1、https://www.cnblogs.com/lidabo/p/7567469.html

2、https://www.cnblogs.com/zhj11226/p/9922098.html

3、https://blog.csdn.net/gada352/article/details/80504080

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值