盒子
盒子
Posts List
  1. 编译准备
  2. 编译过程
  3. 报错处理
    1. 3.2以下版本报错解决
  4. 参考资料

使用cygwin编译Windows版iperf3

由于想在Windows下使用最新的iperf3,但[https://iperf.fr/iperf-download.php#windows](https://iperf.fr/iperf-download.php#windows)从3.1.3之后就没有更新了,于是尝试了下自己编译最新的iperf3版本。

编译准备

下载并安装cygwin, 安装所有Devel,在cygwin shell下载iperf3源码。

编译过程

cd iperf源码目录
./bootstrap.sh #可选
./configure
make
make install

报错处理

如果make中出现以下错误,需要修改cygwin的ossl_typ.h文件((默认为:C:\cygwin64\usr\include\openssl\ossl_typ.h)):

$ make
Making all in src
make[1]: Entering directory '/iperf-3.6/src'
make all-am
make[2]: Entering directory '/iperf-3.6/src'
/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -g -O2 -Wall -MT iperf_api.lo -MD -MP -MF .deps/iperf_api.Tpo -c -o iperf_api.lo iperf_api.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -g -O2 -Wall -MT iperf_api.lo -MD -MP -MF .deps/iperf_api.Tpo -c iperf_api.c -DDLL_EXPORT -DPIC -o .libs/iperf_api.o
In file included from /usr/include/w32api/Windows.h:95:0,
from iperf_api.c:67:
/usr/include/openssl/ossl_typ.h:159:29: error: expected ‘)’ before numeric constant
typedef struct X509_name_st X509_NAME;
^
/usr/include/openssl/ossl_typ.h:207:33: error: expected ‘)’ before numeric constant
typedef struct ocsp_response_st OCSP_RESPONSE;
^
make[2]: *** [Makefile:897: iperf_api.lo] Error 1
make[2]: Leaving directory '/iperf-3.6/src'
make[1]: *** [Makefile:665: all] Error 2
make[1]: Leaving directory '/iperf-3.6/src'
make: *** [Makefile:386: all-recursive] Error 1

修改ossl_typ.h文件,添加# include <windows.h>

#ifndef HEADER_OPENSSL_TYPES_H
# define HEADER_OPENSSL_TYPES_H
#include <limits.h>
#ifdef __cplusplus
extern "C" {
#endif
# include <openssl/e_os2.h>
# include <windows.h>

3.2以下版本报错解决

如果编译的是3.2以下版本,如3.1.7,可能会遇到另外两种错误,解决方法如下:
iprintf定义错误:

sed -i 's/iprintf/iiprintf/g' src/*.{c,h}

路径错误:
打开*\src\iperf_api.c文件,查找“XXXXXX”字段,将2667行代码:char buf[] = "/tmp/iperf3.XXXXXX";,替换为:har buf[ = "./iperf3.XXXXXX";重新make即可。

参考资料

windows上编译iperf
Iperf 3.7 Windows build

支持一下
扫一扫,支持一下