OpenConnect 是一个开源的 VPN 客户端 ,最初是为了兼容 Cisco 的 AnyConnect 协议开发的,现在支持多个 VPN 协议,功能强大、跨平台。
OpenConnect 支持多个协议和 VPN 后端,包括:
协议/服务 简介 Cisco AnyConnect SSL VPN 初代支持目标,完全兼容 Juniper/Pulse Connect Secure 支持通过 –protocol=nc GlobalProtect (Palo Alto)通过 –protocol=gp Fortinet FortiGate SSL VPN 通过 –protocol=fortinet F5 BIG-IP 部分支持 ocserv OpenConnect 服务端(开源版)
今天我们针对MacOS、iOS、Windows、Linux、Android进行统一的编译,导出动态和静态库,
1. ✅ 安装依赖(用 Homebrew)
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh > install.sh && chmod 755 install.sh
echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install autoconf automake libtool pkg-config gnutls libxml2 lz4 gcc
设置必要的 pkg-config 路径(视架构可能不同):
Apple Silicon
export CC=/opt/homebrew/Cellar/gcc/14.2.0_1/bin/gcc-14
export CXX=/opt/homebrew/Cellar/gcc/14.2.0_1/bin/g++-14
export PKG_CONFIG_PATH="/opt/homebrew/opt/libxml2/lib/pkgconfig:/opt/homebrew/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
Intel x86_64
export CC=/usr/local/Cellar/gcc/14.2.0/bin/gcc-14
export CXX=/usr/local/Cellar/gcc/14.2.0/bin/g++-14
export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
2. ✅ 获取 openconnect 源码
Apple Silicon
mkdir -p /Volumes/mindata/app/ovsea/rootfs/macos_aarch64
cd /Volumes/mindata/app/openconnect/macos_aarch64
git clone https://gitlab.com/openconnect/openconnect.git
cd openconnect
Intel x86_64
mkdir -p /Volumes/mindata/app/ovsea/rootfs/macos_x86_64
cd /Volumes/mindata/app/openconnect/macos_x86_64
git clone https://gitlab.com/openconnect/openconnect.git
cd openconnect
3. ✅ 配置静态编译参数(autotools)
运行 configure,开启静态库编译、关闭动态库:
aarch64
./autogen.sh
./configure \
--prefix=/Volumes/mindata/app/ovsea/rootfs/macos_aarch64 \
--enable-static \
--with-gnutls \
--without-openssl \
--with-vpnc-script=/etc/vpnc/vpnc-script \
CFLAGS="-O2 -fPIC" \
LDFLAGS=""
x86_64
./autogen.sh
./configure \
--prefix=/Volumes/mindata/app/ovsea/rootfs/macos_x86_64 \
--enable-static \
--with-gnutls \
--without-openssl \
--with-vpnc-script=/etc/vpnc/vpnc-script \
CFLAGS="-O2 -fPIC" \
LDFLAGS=""
注意这个vpnc-script的目录不需要真实存在,因为我们只要静态库
4. ✅ 编译生成 .a 静态库
make && make install
1. ✅ 准备交叉编译工具链
使用 xcrun 获取 iOS SDK 路径:
export IOS_SDK=$(xcrun --sdk iphoneos --show-sdk-path)
export IOS_PLATFORM=$(xcrun --sdk iphoneos --show-sdk-platform-path)
设置架构和目标:
export CC="$(xcrun --sdk iphoneos -f clang)"
export CXX="$(xcrun --sdk iphoneos -f clang++)"
export CPPFLAGS="-isysroot $IOS_SDK -arch arm64"
export CFLAGS="$CPPFLAGS -O2 -fembed-bitcode"
export LDFLAGS="-isysroot $IOS_SDK -arch arm64"
2. ✅ 获取 openconnect 源码
cd /Volumes/mindata/app/openconnect/ios_aarch64
git clone https://gitlab.com/openconnect/openconnect.git
cd openconnect
删除PCSC
打开 openconnect/Makefile.am(或 Makefile.in) 找到这行:
lib_srcs_yubikey = yubikey.c
libopenconnect_la_SOURCES = version.c $(library_srcs)
libopenconnect_la_CFLAGS = $(AM_CFLAGS) $(SSL_CFLAGS) $(DTLS_SSL_CFLAGS) \
$(LIBXML2_CFLAGS) $(JSON_CFLAGS) $(LIBPROXY_CFLAGS) $(ZLIB_CFLAGS) \
$(P11KIT_CFLAGS) $(TSS_CFLAGS) $(LIBSTOKEN_CFLAGS) $(LIBPSKC_CFLAGS) \
$(GSSAPI_CFLAGS) $(INTL_CFLAGS) $(ICONV_CFLAGS) $(LIBPCSCLITE_CFLAGS) \
$(LIBP11_CFLAGS) $(LIBLZ4_CFLAGS)
libopenconnect_la_LIBADD = $(SSL_LIBS) $(DTLS_SSL_LIBS) \
$(LIBXML2_LIBS) $(LIBPROXY_LIBS) $(ZLIB_LIBS) $(P11KIT_LIBS) \
$(TSS_LIBS) $(LIBSTOKEN_LIBS) $(LIBPSKC_LIBS) $(GSSAPI_LIBS) \
$(INTL_LIBS) $(ICONV_LIBS) $(LIBPCSCLITE_LIBS) $(LIBP11_LIBS)\
$(LIBLZ4_LIBS) ${JSON_LIBS}
把 yubikey.c 删除!
3. ✅ 配置静态编译参数(autotools)
运行 configure,开启静态库编译、关闭动态库:
./autogen.sh
./configure \
--host=arm-apple-darwin \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
--enable-static \
--with-gnutls \
--without-openssl \
--with-vpnc-script=/etc/vpnc/vpnc-script \
--without-libpcsclite \
CC="$CC" CFLAGS="$CFLAGS -I$(pwd)/../libs/usr/local/include -I$(pwd)/../libs/include" \
LDFLAGS="$LDFLAGS -L$(pwd)/../libs/usr/local/lib -L$(pwd)/../libs/lib -lz -liconv -lnettle -lhogweed -lgmp -ltasn1 -lidn2 -lunistring"
注意这个vpnc-script的目录不需要真实存在,因为我们只要静态库
4. ✅ 编译
需要预先编译一些代码 • 编译 GMP(供 nettle 使用)
curl -O https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
tar xf gmp-6.3.0.tar.xz && cd gmp-6.3.0
./configure --host=arm-apple-darwin \
--disable-assembly \
--enable-static --disable-shared \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
make -j8
make install
cd ..
cp /Volumes/mindata/app/openconnect/ios_aarch64/libs
• 编译 Nettle
curl -O https://ftp.gnu.org/gnu/nettle/nettle-3.9.1.tar.gz
tar xf nettle-3.9.1.tar.gz && cd nettle-3.9.1
./configure --host=arm-apple-darwin \
--enable-static --disable-shared \
--disable-assembler \
--disable-arm-neon \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
--with-lib-path=$(pwd)/../libs/lib \
--with-include-path=$(pwd)/../libs/include \
CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
make -j8
make install
cd ..
• 编译 libtasn1
curl -O https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.19.0.tar.gz
tar xf libtasn1-4.19.0.tar.gz && cd libtasn1-4.19.0
./configure --host=arm-apple-darwin \
--enable-static --disable-shared \
CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
make -j8
make install DESTDIR=$(pwd)/../libs
cd ..
• 编译 ZSTD
git clone https://github.com/facebook/zstd.git
cd zstd
make lib-mt CC="$CC" CFLAGS="$CFLAGS"
mkdir -p ../libs/lib
mkdir -p ../libs/include
cp lib/libzstd.a ../libs/lib/
cp -r lib ../libs/include/zstd
cd ..
• 编译 libunistring
curl -LO https://ftp.gnu.org/gnu/libunistring/libunistring-1.2.tar.gz
tar xf libunistring-1.2.tar.gz && cd libunistring-1.2
./configure --host=arm-apple-darwin \
--enable-static --disable-shared \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
make -j8 && make install
cd ..
• 编译 libidn2
curl -LO https://ftp.gnu.org/gnu/libidn/libidn2-2.3.4.tar.gz
tar xf libidn2-2.3.4.tar.gz && cd libidn2-2.3.4
./configure --host=arm-apple-darwin \
--enable-static --disable-shared \
--disable-nls --without-libiconv-prefix \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" \
CFLAGS="$CFLAGS -I/Volumes/mindata/app/openconnect/ios_aarch64/libs/include" \
LDFLAGS="$LDFLAGS -L/Volumes/mindata/app/openconnect/ios_aarch64/libs/lib" \
UNISTRING_CFLAGS="-I/Volumes/mindata/app/openconnect/ios_aarch64/libs/include" \
UNISTRING_LIBS="-L/Volumes/mindata/app/openconnect/ios_aarch64/libs/lib -lunistring"
make -j8 && make install
cd ..
• 编译 GnuTLS
curl -O https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.3.tar.xz
tar xf gnutls-3.8.3.tar.xz && cd gnutls-3.8.3
./configure --host=arm-apple-darwin \
--enable-static --disable-shared \
--with-included-libtasn1 \
--with-included-unistring \
--disable-nls \
--disable-cxx \
--without-p11-kit \
--with-included-libtasn1 \
--with-included-unistring \
--disable-doc \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" CFLAGS="$CFLAGS -I$(pwd)/../libs/usr/local/include -I$(pwd)/../libs/include" \
LDFLAGS="$LDFLAGS -L$(pwd)/../libs/usr/local/lib -L$(pwd)/../libs/lib"
make -j8
make install DESTDIR=$(pwd)/../libs
cd ..
• 编译 liblz4
# 1. 获取源码
git clone https://github.com/lz4/lz4.git
cd lz4
# 3. 编译静态库
make lib CC="$CC" CFLAGS="$CFLAGS"
# 4. 安装输出
mkdir -p ../libs/lib ../libs/include
cp lib/liblz4.a ../libs/lib/
cp lib/lz4.h ../libs/include/
cd ..
• 编译 zlib
curl -LO https://zlib.net/zlib-1.3.1.tar.gz
tar xf zlib-1.3.1.tar.gz
cd zlib-1.3.1
./configure --static
make CC="$CC" CFLAGS="$CFLAGS"
mkdir -p ../libs/lib ../libs/include
cp libz.a ../libs/lib/
cp zlib.h zconf.h ../libs/include/
cd ..
• 编译 libxml2
curl -LO http://xmlsoft.org/sources/libxml2-2.11.7.tar.gz
curl -LO https://github.com/GNOME/libxml2/archive/refs/tags/v2.14.0.tar.gz
mv v2.14.0.tar.gz libxml2-2.14.0.tar.gz && tar xf libxml2-2.14.0.tar.gz && cd libxml2-2.14.0
# ===== 配置编译参数 ===== #
./autogen.sh
./configure \
--host=arm-apple-darwin \
--enable-static \
--disable-shared \
--without-python \
--without-lzma \
--disable-dependency-tracking \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
# ===== 编译并安装 ===== #
make -j8
make install
cd ..
• 编译 stoken
git clone https://github.com/cernekee/stoken.git
cd stoken
./autogen.sh
./configure \
--host=arm-apple-darwin \
--enable-static --disable-shared \
--prefix=/Volumes/mindata/app/openconnect/ios_aarch64/libs \
CC="$CC" CFLAGS="$CFLAGS -I$(pwd)/../libs/usr/local/include -I$(pwd)/../libs/include" \
LDFLAGS="$LDFLAGS -L$(pwd)/../libs/usr/local/lib -L$(pwd)/../libs/lib"
make -j8
make install
cd ..
5. ✅ 编译生成静态库
make && make install
1. ✅ 安装依赖
mkdir -p /d/app/openconnect/win_x86_64/external
cd
2. ✅ 获取 wintun 源码
cd /d/app/openconnect/win_x86_64/wintun
wget https://www.wintun.net/builds/wintun-0.14.1.zip
cd ../
3. ✅ 配置静态编译参数(autotools)
使用下面的编译脚本即可:
nano -w build_deps_mingw@msys2.sh
#
# Sample script to checkout & build 'openconnect' project
# with MINGW64 on MSYS2 toolchain
#
# It should be used only as illustration how to build application
# and create an installer package
#
# (c) 2018-2021, Lubomir Carik
#
SAVE_PWD=$(pwd)
BUILD_DIR="${BUILD_DIR:-build-$MSYSTEM}"
if [ "$MSYSTEM" == "MINGW64" ]; then
export BUILD_ARCH=x86_64
export MINGW_PREFIX=/mingw64
WINTUN_ARCH=amd64
elif [ "$MSYSTEM" == "MINGW32" ]; then
export BUILD_ARCH=i686
export MINGW_PREFIX=/mingw32
WINTUN_ARCH=x86
else
echo "Unknown MSYS2 build environment..."
exit -1
fi
export STOKEN_TAG=v0.92
WINTUN_VERSION=0.14.1
#root directory is the parent of the directory containing the build script
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")/.." >/dev/null 2>&1 && pwd )"
#sanity check for root dir
if [ ! -d ${ROOT_DIR}/external ]; then
echo "Root Directory not set correctly: ${ROOT_DIR}"
exit 1
fi
echo "Starting under $MSYSTEM build environment ($ROOT_DIR)..."
if [ "$1" == "--head" ]; then
export OC_TAG=master
else
export OC_TAG=v9.12
fi
echo "OpenConnect: $OC_TAG"
echo "stoken: $STOKEN_TAG"
echo "wintun: $WINTUN_VERSION"
echo ""
export OC_URL=https://gitlab.com/openconnect/openconnect.git
export STOKEN_URL=https://github.com/stoken-dev/stoken
echo "======================================================================="
echo " Preparing sandbox..."
echo "======================================================================="
if [ "$STOKEN_TAG" != "v0.92" ]; then
BUILD_STOKEN=yes
fi
BUILD_STOKEN=${BUILD_STOKEN:-no}
echo "======================================================================="
echo " Installing dependencies..."
echo "======================================================================="
set -e
pacman --needed --noconfirm -S \
git \
unzip \
p7zip \
base-devel \
autotools \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-jq \
mingw-w64-${BUILD_ARCH}-gcc \
mingw-w64-${BUILD_ARCH}-make \
mingw-w64-${BUILD_ARCH}-gnutls \
mingw-w64-${BUILD_ARCH}-libidn2 \
mingw-w64-${BUILD_ARCH}-libunistring \
mingw-w64-${BUILD_ARCH}-nettle \
mingw-w64-${BUILD_ARCH}-gmp \
mingw-w64-${BUILD_ARCH}-p11-kit \
mingw-w64-${BUILD_ARCH}-zlib \
mingw-w64-${BUILD_ARCH}-libxml2 \
mingw-w64-${BUILD_ARCH}-zlib \
mingw-w64-${BUILD_ARCH}-lz4 \
mingw-w64-${BUILD_ARCH}-nsis \
mingw-w64-${BUILD_ARCH}-libproxy
#openconnect compilation is broken on recent versions (>=2.12) of libxml2 because of header reorg
#(see https://gitlab.com/openconnect/openconnect/-/issues/685)
#
#use latest 2.11 version until openconnect is fixed
#TODO remove the following line after bumping OC_TAG (hopefully to v9.13)
pacman --needed --noconfirm -U https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-libxml2-2.11.6-1-any.pkg.tar.zst
set +e
[ -d "${BUILD_DIR}" ] || mkdir "${BUILD_DIR}"
cd "${BUILD_DIR}"
#CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu || echo "$NUMBER_OF_PROCESSORS")
CORES=$(getconf _NPROCESSORS_ONLN)
if [ "x$BUILD_STOKEN" = "xno" ]; then
echo "======================================================================="
echo " Installing stoken..."
echo "======================================================================="
pacman --needed --noconfirm -S \
mingw-w64-${BUILD_ARCH}-stoken
else
echo "======================================================================="
echo " Building stoken..."
echo "======================================================================="
[ -d stoken ] || git clone -b ${STOKEN_TAG} ${STOKEN_URL}
cd stoken
git clean -fdx
git reset --hard ${STOKEN_TAG}
set -e
./autogen.sh
set +e
[ -d build-${BUILD_ARCH} ] || mkdir build-${BUILD_ARCH}
cd build-${BUILD_ARCH}
set -e
../configure --disable-dependency-tracking --without-tomcrypt --without-gtk
mingw32-make -j${CORES}
mingw32-make install
cd ../../
set +e
fi
echo "======================================================================="
echo " Building openconnect..."
echo "======================================================================="
[ -d openconnect ] || git clone -b ${OC_TAG} ${OC_URL}
set -e
cd openconnect
set +e
git clean -fdx
git reset --hard ${OC_TAG}
set -e
echo "hash:"
git rev-parse --short HEAD | tee ../openconnect-${OC_TAG}_$MSYSTEM.hash
# For openconnect we need wintun locally to avoid downloading
# which is unreliable.
#WINTUNFILE=$(cat Makefile.am|grep ^WINTUNDRIVER |cut -d '=' -f 2|sed 's/^\s//')
#echo "Copying ${WINTUNFILE} for openconnect"
#cp ../../wintun/${WINTUNFILE} .
./autogen.sh
set +e
[ -d build-${BUILD_ARCH} ] || mkdir build-${BUILD_ARCH}
cd build-${BUILD_ARCH}
set -e
#disable libproxy since libproxy >= 0.5 has a lot of dependencies that expand the attack surface
#see https://gitlab.com/openconnect/openconnect-gui/-/merge_requests/259#note_1713843295
CFLAGS="${CFLAGS} -O2 -g -Wno-error=incompatible-pointer-types" ../configure --disable-dependency-tracking --with-gnutls --without-openssl --without-libpskc --without-libproxy --with-vpnc-script=vpnc-script-win.js
#Make only openconnect.exe; openconnect 12.x fails when generating the nsis installer and
#we do not use the installer or other created artifacts.
mingw32-make -j${CORES} openconnect.exe
cd ../../
set +e
#
# Sample script to create a package from build 'openconnect' project
# incl. all dependencies (hardcoded paths!)
#
echo "======================================================================="
echo " Packaging..."
echo "======================================================================="
rm -rf pkg
mkdir -p pkg/nsis && cd pkg/nsis
set -e
cp ${MINGW_PREFIX}/bin/libffi-8.dll .
cp ${MINGW_PREFIX}/bin/libgcc_*-1.dll .
cp ${MINGW_PREFIX}/bin/libgmp-10.dll .
cp ${MINGW_PREFIX}/bin/libgnutls-30.dll .
cp ${MINGW_PREFIX}/bin/libhogweed-6.dll .
cp ${MINGW_PREFIX}/bin/libintl-8.dll .
cp ${MINGW_PREFIX}/bin/libnettle-8.dll .
cp ${MINGW_PREFIX}/bin/libp11-kit-0.dll .
cp ${MINGW_PREFIX}/bin/libtasn1-6.dll .
cp ${MINGW_PREFIX}/bin/libwinpthread-1.dll .
cp ${MINGW_PREFIX}/bin/libxml2-2.dll .
cp ${MINGW_PREFIX}/bin/zlib1.dll .
cp ${MINGW_PREFIX}/bin/libstoken-1.dll .
cp ${MINGW_PREFIX}/bin/liblz4.dll .
cp ${MINGW_PREFIX}/bin/libiconv-2.dll .
cp ${MINGW_PREFIX}/bin/libunistring-5.dll .
cp ${MINGW_PREFIX}/bin/libidn2-0.dll .
cp ${MINGW_PREFIX}/bin/liblzma-5.dll .
cp ${MINGW_PREFIX}/bin/libbrotlicommon.dll .
cp ${MINGW_PREFIX}/bin/libbrotlidec.dll .
cp ${MINGW_PREFIX}/bin/libzstd.dll .
cp ${MINGW_PREFIX}/bin/libbrotlienc.dll .
cp ../../openconnect/build-${BUILD_ARCH}/.libs/libopenconnect-5.dll .
#cp ../../openconnect/build-${BUILD_ARCH}/.libs/wintun.dll .
cp ../../openconnect/build-${BUILD_ARCH}/.libs/openconnect.exe .
echo "Getting vpnc-script from https://gitlab.com/openconnect/vpnc-scripts/..."
curl --no-progress-meter -o vpnc-script-win.js https://gitlab.com/openconnect/vpnc-scripts/-/raw/master/vpnc-script-win.js
echo "Extracting wintun.dll..."
unzip -j ${ROOT_DIR}/wintun/wintun-${WINTUN_VERSION}.zip "wintun/bin/${WINTUN_ARCH}/wintun.dll" -d .
cd ../../
set +e
mkdir -p pkg/lib && cd pkg/lib
set -e
cp ${MINGW_PREFIX}/lib/libgmp.dll.a .
cp ${MINGW_PREFIX}/lib/libgnutls.dll.a .
cp ${MINGW_PREFIX}/lib/libhogweed.dll.a .
cp ${MINGW_PREFIX}/lib/libnettle.dll.a .
cp ${MINGW_PREFIX}/lib/libp11-kit.dll.a .
cp ${MINGW_PREFIX}/lib/libxml2.dll.a .
cp ${MINGW_PREFIX}/lib/libz.dll.a .
cp ${MINGW_PREFIX}/lib/libstoken.dll.a .
cp ${MINGW_PREFIX}/lib/liblz4.dll.a .
cp ${MINGW_PREFIX}/lib/libiconv.dll.a .
cp ${MINGW_PREFIX}/lib/libunistring.dll.a .
cp ${MINGW_PREFIX}/lib/libidn2.dll.a .
cp ${MINGW_PREFIX}/lib/liblzma.dll.a .
cp ../../openconnect/build-${BUILD_ARCH}/.libs/libopenconnect.dll.a .
cd ../../
set +e
mkdir -p pkg/lib/pkgconfig && cd pkg/lib/pkgconfig
set -e
cp ${MINGW_PREFIX}/lib/pkgconfig/gnutls.pc .
cp ${MINGW_PREFIX}/lib/pkgconfig/hogweed.pc .
cp ${MINGW_PREFIX}/lib/pkgconfig/libxml-2.0.pc .
cp ${MINGW_PREFIX}/lib/pkgconfig/nettle.pc .
cp ${MINGW_PREFIX}/lib/pkgconfig/zlib.pc .
cp ${MINGW_PREFIX}/lib/pkgconfig/stoken.pc .
cp ../../../openconnect/build-${BUILD_ARCH}/openconnect.pc .
cd ../../../
mkdir -p pkg/include && cd pkg/include
cp -R ${MINGW_PREFIX}/include/gnutls/ .
cp -R ${MINGW_PREFIX}/include/libxml2/ .
cp -R ${MINGW_PREFIX}/include/nettle/ .
cp -R ${MINGW_PREFIX}/include/p11-kit-1/p11-kit/ .
cp ${MINGW_PREFIX}/include/gmp.h .
cp ${MINGW_PREFIX}/include/zconf.h .
cp ${MINGW_PREFIX}/include/zlib.h .
cp ${MINGW_PREFIX}/include/stoken.h .
cp ../../openconnect/openconnect.h .
cd ../../
export MINGW_PREFIX=
cd pkg/nsis
7za a -tzip -mx=9 -sdel ../../openconnect-${OC_TAG}_$MSYSTEM.zip *
cd ../
rmdir -v nsis
7za a -tzip -mx=9 -sdel ../openconnect-devel-${OC_TAG}_$MSYSTEM.zip *
cd ../
set +e
rmdir -v pkg
if [ "x$BUILD_STOKEN" = "xyes" ]; then
echo "======================================================================="
echo " Uninstalling system-wide stoken..."
echo "======================================================================="
#uninstall stoken; we just build it for the library
cd stoken/build-${BUILD_ARCH}
mingw32-make install
cd ../..
fi
set -e
echo "List of system-wide used packages versions:" \
> openconnect-${OC_TAG}_$MSYSTEM.txt
echo "openconnect-${OC_TAG}" \
>> openconnect-${OC_TAG}_$MSYSTEM.txt
echo "stoken-${STOKEN_TAG}" \
>> openconnect-${OC_TAG}_$MSYSTEM.txt
pacman -Q \
mingw-w64-${BUILD_ARCH}-gnutls \
mingw-w64-${BUILD_ARCH}-libidn2 \
mingw-w64-${BUILD_ARCH}-libunistring \
mingw-w64-${BUILD_ARCH}-nettle \
mingw-w64-${BUILD_ARCH}-gmp \
mingw-w64-${BUILD_ARCH}-p11-kit \
mingw-w64-${BUILD_ARCH}-libxml2 \
mingw-w64-${BUILD_ARCH}-zlib \
mingw-w64-${BUILD_ARCH}-lz4 \
mingw-w64-${BUILD_ARCH}-libproxy \
>> openconnect-${OC_TAG}_$MSYSTEM.txt
sha512sum.exe openconnect-${OC_TAG}_$MSYSTEM.zip > openconnect-${OC_TAG}_$MSYSTEM.zip.sha512
sha512sum.exe openconnect-devel-${OC_TAG}_$MSYSTEM.zip > openconnect-devel-${OC_TAG}_$MSYSTEM.zip.sha512
mv -vu openconnect-*.zip openconnect-*.txt openconnect-*.zip.sha512 openconnect-${OC_TAG}_$MSYSTEM.hash ${ROOT_DIR}/external
set +e
cd ${SAVE_PWD}
4. ✅ 编译生成 .a 静态库
chmod 755 build_deps_mingw@msys2.sh
./build_deps_mingw@msys2.sh
5. ✅ 拷贝文件备用
cp -r libs/lib /Volumes/mindata/app/OvSeaUI/libs/windows/x86_64/
cp -r libs/include /Volumes/mindata/app/OvSeaUI/libs/windows/x86_64/