OpenConnect全平台编译

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部分支持
ocservOpenConnect 服务端(开源版)

今天我们针对MacOS、iOS、Windows、Linux、Android进行统一的编译,导出动态和静态库,

  • MacOS

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
  • iOS

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

  • Windows(msys2 mingw64)

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/

  • Linux

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在C/C++分类目录。将固定链接加入收藏夹。