net-snmp vs2019 msvc编译(32位、64位)(踩坑记录)

官方下载:https://sourceforge.net/projects/net-snmp/
版本:本次下载使用为目前的最新版本 5.9.4.rc1
编译步骤:

一、下载后解压,即可见到如下界面

在这里插入图片描述

二、

进入win32文件夹,找到win32.dsw,双击用vs打开,会自动转为win32.sln,进入如下界面
在libsnmp项目上单击右键,设置为启动项目。(因为这是net-snmp的库项目,其他项目依赖于这个项目)。我这里只想使用libsnmp库进行编程,snmpwalk库用于测试。
在这里插入图片描述

三、踩坑:

首先编译生成libsnmp,无问题。接着编译snmpwalk遇到如下错误:
在这里插入图片描述
这里其实是两个问题引起的:
1、在Windows上使用asprintf(),根据下面的连接,自己写了个myprint.h添加到libsnmp项目,在mib.c中加入#include “myprint.h”,解决
https://www.oomake.com/question/12234603
myprint.h内容如下

#pragma once
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-features.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <stdarg.h>
#include <stdlib.h>
int vasprintf(char **strp, const char *fmt, va_list ap)
{
    // _vscprintf tells you how big the buffer needs to be
    int len = _vscprintf(fmt, ap);

    if (len == -1)
    {
        return -1;
    }

    size_t size = (size_t)len + 1;
    char *str = malloc(size);

    if (!str)
    {
        return -1;
    }

    // _vsprintf_s is the "secure" version of vsprintf
    int r = vsprintf_s(str, len + 1, fmt, ap);

    if (r == -1)
    {
        free(str);
        return -1;
    }

    *strp = str;
    return r;
}

int asprintf(char **strp, const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    int r = vasprintf(strp, fmt, ap);
    va_end(ap);
    return r;
}

2、netsnmp_bindtodevicenetsnmp_parse_ep_str两个函数未定义,经查看,在libsnmp中有部分代码使用了该函数,该函数声明在snmpIpBaseDomain.h中,定义在snmpIpBaseDomain.c,但实际项目中未添加该文件,右键添加现有项,文件位置
在这里插入图片描述
将上面两处更改完后,重新编译libsnmp,然后编译snmpwalk,成功。

四、64位编译

由于我本身使用的项目为64位,刚才的库编译为32位,需重新编为64,更改如下配置,
右键-》属性-》配置管理器,新建平台,如下,然后重新编译
在这里插入图片描述

在这里插入图片描述

五、使用

1、如下路径找到该文件,拷贝至自己的项目,记得在链接器中引用,如何引用lib文件就不在赘述。
在这里插入图片描述
2、拷贝头文件
拷贝net-snmp文件夹至自己的项目,路径如下
在这里插入图片描述
继续从另外路径拷贝,至同样目录,默认全部替换,即可
在这里插入图片描述
------------------- ---------------------------分割线--------------------------------------------------------
在遇到上述问题后,期间用比较老的版本编译了下,没有出现上述错误,但需要做一些小改动,记录如下
版本: 5.7.3
1、net-snmp-5.7.3\win32\net-snmp\net-snmp-config.h
该文件红框部分删掉,不然报错,并且看了看最新版没有这段代码,并且是这个
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
我看了我的_MSC_VER 版本是1929,看样子不会走该逻辑
在这里插入图片描述
2、···找不到了,记得是某处重定义了,注释其中一处即可

参考链接:https://blog.csdn.net/zzidea/article/details/61422717

六、自己编译的资源链接

https://download.csdn.net/download/qq_45988470/88158389?spm=1001.2014.3001.5501

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值