SNMP入门教程:Windows下编译

net-snmp提供的官方库太老了,需要自己编译新版本。

net-snmp下载最新版源码。

2025.08.05 最新版是5.9.4

解压后发现源码目录没有提供Makefile或者CMakeLists.txt等文件,只有一个configure脚本,这个脚本是Linux下常用的。

在win32子目录下发现有build.bat的文件,应该是用于编译的脚本。

perl

Strawberry Perl下载x64位,安装即可。

当前版本为5.40.2,安装完成后自动添加环境变量。

openssl

v3版本需要openssl库,这里使用vcpkg安装

1
vcpkg install openssl

修改源码

编译流程对Windows不友好,根据实际编译流程,修改部分文件内容。

build.pl

/win32/build.pl中添加变量,解决总是编译32位程序问题。

1
2
3
my $target_arch = $ENV{TARGET_CPU} ? $ENV{TARGET_CPU} : $ENV{Platform} ?
$ENV{Platform} : "x86";
my $target_arch = "x64";

一旦编译了32位库,那整个环境就被污染了,只能删除源码重来。

net-snmp-config.h

/win32/net-snmp/net-snmp-config.h.in中找到1777行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

/* MSVC OpenSSL linker settings. */
#if defined(_MSC_VER)
# if defined(NETSNMP_USE_OPENSSL)
# ifdef _DLL
# ifdef _DEBUG
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MDd.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# else
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MD.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# endif
# else
# ifdef _DEBUG
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MTd.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# else
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# endif
# endif
# pragma comment(lib, "gdi32.lib")
# pragma comment(lib, "user32.lib")
# endif
#endif

#endif /* WIN32 */

修改将要链接的库名称。

编译

打开VS2022的x64本机命令行环境,进入win32子目录。

1
2
3
4
5
6
7
8
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

C:\Program Files\Microsoft Visual Studio\2022\Community>D:

D:\>cd net-snmp-5.9.4

D:\net-snmp-5.9.4>cd win32

执行build.bat脚本编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
D:\net-snmp-5.9.4\win32>.\build.bat
"my" variable $target_arch masks earlier declaration in same scope at build.pl line 16.


Net-SNMP build and install options
==================================

1. OpenSSL support: disabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC

4. Install path: c:/usr
5. Install after build: enabled

6. Perl modules: disabled
7. Install perl modules: disabled

8. Quiet build (logged): enabled
9. Debug mode: disabled

10. IPv6 transports: disabled
11. winExtDLL agent: disabled

12. Link type: static

13. Install development files disabled

F. Finished - start build
Q. Quit - abort build

Select option to set / toggle:

选择数字进行设置。

选择1,使用openssl库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Net-SNMP build and install options
==================================

1. OpenSSL support: enabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC

4. Install path: c:/usr
5. Install after build: enabled

6. Perl modules: disabled
7. Install perl modules: disabled

8. Quiet build (logged): enabled
9. Debug mode: disabled

10. IPv6 transports: disabled
11. winExtDLL agent: disabled

12. Link type: static

13. Install development files disabled

F. Finished - start build
Q. Quit - abort build

Select option to set / toggle: 13

选择13,安装开发环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Net-SNMP build and install options
==================================

1. OpenSSL support: enabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC

4. Install path: c:/usr
5. Install after build: enabled

6. Perl modules: disabled
7. Install perl modules: disabled

8. Quiet build (logged): enabled
9. Debug mode: disabled

10. IPv6 transports: disabled
11. winExtDLL agent: disabled

12. Link type: static

13. Install development files enabled

F. Finished - start build
Q. Quit - abort build

Select option to set / toggle: 2
Please enter the OpenSSL include directory [C:\Progra~1\OpenSSL-Win64\include]: C:\vcpkg\installed\x64-windows\include

选择2,设置OpenSSL头文件目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Net-SNMP build and install options
==================================

1. OpenSSL support: enabled
2. OpenSSL include directory: C:/vcpkg/installed/x64-windows/include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC

4. Install path: c:/usr
5. Install after build: enabled

6. Perl modules: disabled
7. Install perl modules: disabled

8. Quiet build (logged): enabled
9. Debug mode: disabled

10. IPv6 transports: disabled
11. winExtDLL agent: disabled

12. Link type: static

13. Install development files enabled

F. Finished - start build
Q. Quit - abort build

Select option to set / toggle: 3
Please enter the OpenSSL library directory [C:\Progra~1\OpenSSL-Win64\lib\VC]: C:\vcpkg\installed\x64-windows\lib

选择3,设置OpenSSL库目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Net-SNMP build and install options
==================================

1. OpenSSL support: enabled
2. OpenSSL include directory: C:/vcpkg/installed/x64-windows/include
3. OpenSSL library director: C:/vcpkg/installed/x64-windows/lib

4. Install path: c:/usr
5. Install after build: enabled

6. Perl modules: disabled
7. Install perl modules: disabled

8. Quiet build (logged): enabled
9. Debug mode: disabled

10. IPv6 transports: disabled
11. winExtDLL agent: disabled

12. Link type: static

13. Install development files enabled

F. Finished - start build
Q. Quit - abort build

Select option to set / toggle: f

至此,配置完成,选择F进行编译。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Select option to set / toggle: f

Building...

Creating *.out log files.

Deleting old log files...
Running Configure...
Cleaning...
Building main package...

Installing main package...
Installing development files...

Done!
D:\net-snmp-5.9.4\win32>

编译完成自动退出。到C:\usr可以查看编译结果。默认是Release版本,静态库。

以此流程编译Debug版和动态库。

下载

CSDN:net-snmp 5.9.4 Windows x64 with openssl 自编译版 20MB


SNMP入门教程:Windows下编译
https://blog.jackeylea.com/snmp/how-to-build-library-under-windows/
作者
JackeyLea
发布于
2025年8月8日
许可协议