QT5.14.2使用SNMP++

QT5.14.2使用SNMP++(亲测可用)

实现思路:​​​​​下载snmp++源码 ——> VS编译源码生成lib库 ——> Qt程序添加lib库和头文件目录

注意事项:

1.因为snmp++源码的关系,所开发程序必须使用32位编译器

2.QT和VS版本的对应关系,可以参考这里可以参考这里

3.QT必须使用对应于VS版本的MSVC(32位)编译器

4.32(64)位的lib库64(32)位编译器识别可能会出错


目录

QT5.14.2使用SNMP++(亲测可用)

资源准备:

编译准备

编译libdes.lib

编译snmp++.lib:

Qt5.14.2使用SNMP++:

我参考的链接


资源准备:

1.VS2017

2.QT5.14.2(安装时勾选MSVC64、MSVC32、MingGW64、MinGW32)

3.源码下载:libdes-l-4.01a.tar.gz

                        snmp++-3.4.6.tar.gz

                        vs2013.zip


编译准备

1.将下载的源码解压

2.将vs2013重命名2017,snmp++-3.4.6重命名为snmp++

3.进入libdes-l-4.01a,用libdes文件夹代替libdes-l-4.01a

4.形成如下形式:


编译libdes.lib

1.进入vs2017/libdes目录,打开libdes.sIn文件,遇到弹出按提示重定向项目点击确定;

2.右键生成,没有报错一帆风顺,在debug目录下也生成了相应的libdes.lib


编译snmp++.lib:

1.用vs2017\SNMP++\include\snmp_pp\config_snmp_pp.h 替换snmp++\include\snmp_pp\config_snmp_pp.h

2.进入vs2017/SNMP++/目录,打开SNMP++.sIn,同样弹窗提示重定向项目点击确定

3.右键点击SNMP++,属性中添加附加包含目录

4.右键点击SNMP++,属性中添加预处理器: _WINSOCK_DEPRECATED_NO_WARNINGS

5.用\vs2017\SNMP++\include\libsnmp.h文件替换掉\snmp++\libsnmp.h文件,在vs目录树中删除无效的libsnmp.h,在重新添加刚才替换过得libsnmp.h

5.

6.右键生成项目报错,只用解决这两个错误即可

7.定位pp_int64到文件位置,使用int64_t替换

8.定位错误inet_ntop重定义到文件位置,注释函数声明

9.右键生成项目成果,SNMP++.lib生成成功


Qt5.14.2使用SNMP++:

1.打开QT5.14.2新建项目,注意编译器的勾选

2.测试代码

#include <QCoreApplication>
#include <iostream>
#include <snmp_pp/snmp_pp.h>
#include <list>
#include <QString>
#include <libsnmp.h>

#ifdef WIN32
#define strcasecmp _stricmp
#endif

#ifdef SNMP_PP_NAMESPACE
using namespace Snmp_pp;
#endif

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    int status1;
    Snmp::socket_startup();
    //设置目标地址
    UdpAddress address("192.168.146.128");
    //设置目标端口
    address.set_port(1611);
    CTarget *ctarget1 = new CTarget(address);
    ctarget1->set_readcommunity("public");

    Snmp *snmp1 = new Snmp(status1);


    Vb vb1(".1.3.6.1.2.1.1.5..0");
    //Snmp snmp1(status1);
    Pdu pdu1;    // SNMP++ PDU
    pdu1 += vb1;
    if (status1 != SNMP_CLASS_SUCCESS) {    // check creation status
        cout << snmp1->error_msg(status1);
        //  if fail, print error string
        return 0;
    }
    // vb1.set_value("3");     // add location string to vb
    pdu1 += vb1;          // add the variable binding
    status1 = snmp1->get(pdu1, *ctarget1);
    cout << snmp1->error_msg(status1);
    pdu1.get_vb(vb1, 0);

    std::string reply = vb1.get_printable_value();

    cout << reply << endl;
    system("pause");
    delete ctarget1;
    ctarget1 = NULL;
    delete snmp1;
    snmp1 = NULL;

    return a.exec();
}

3.QT添加外部库(SNMP++.lib和libdes.lib)

4.QT添加包含目录,将刚VS中的附加包含目录在QT中也配置一次

5.QT添加预处理器:

DEFINES += _WINSOCK_DEPRECATED_NO_WARNINGS

6.QT添加Ws2_32.lib库

LIBS += -lWs2_32

6.编译运行测试代码,注意选择编译器,报错定位后将<iostream.h>改为<iostream>即可

7.再次编译运行,执行成功,得到OID对应的返回值


我参考的链接

1.VS2015编译SNMP++源码_snmp源码-CSDN博客

2.VS2017编译SNMP++记录_pp_int64-CSDN博客

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值