Skip to content

Latest commit

 

History

History
372 lines (304 loc) · 8.46 KB

File metadata and controls

372 lines (304 loc) · 8.46 KB

程序自行编译教程

Note

教程版本: v2.0.8-r1

我还是比较建议使用已有的 github action 来编译的

Warning

必须要使用 build-all-platforms.yml 去选择对应架构去编译

否则会出现不可预测的错误

如果非要自己编译的话, 就往下看吧 (其实就是把 action 各个步骤拆解一下)

自行编译教程很简略, 因为过程完全可以按照 action 的步骤去做, 这里就不再细说

Windows

简单一点 就是在 Windows 使用 vcpkg 安装 mingw 包, 包括 curl 的

然后就使用 vcpkg 的 .cmake 配置来让 cmake 能找到这两个包就可以编译了

# 使用软件: CLion
# 参考 CMake 参数
-DVCPKG_TARGET_TRIPLET=x64-mingw-static \
-DCMAKE_TOOLCHAIN_FILE=G:\Vcpkgs\ESurfingClient\scripts\buildsystems\vcpkg.cmake

复杂一点 的就是跟 action 一样, 用 linux 系统交叉编译

1. 确保安装了以下软件包

# 示例系统: Debian 13
sudo apt install -y cmake \
                    make \
                    ninja-build \
                    gcc-mingw-w64-x86-64 \
                    g++-mingw-w64-x86-64 \
                    mingw-w64-tools \
                    upx-ucl \
                    wget \
                    file \
                    zip \
                    perl \
                    libperl-dev

2. 创建交叉编译工具链

# 根据自身情况判断路径
cd /path/to/esurfingclient/main

cat > toolchain-mingw64.cmake << 'EOF'
      set(CMAKE_SYSTEM_NAME Windows)
      set(CMAKE_SYSTEM_PROCESSOR x86_64)
      
      set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
      set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
      set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
      
      set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
      
      set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
      EOF

3. 使用指定配置编译安装 libcurl

cd /tmp
wget https://curl.se/download/curl-8.20.0.tar.gz
tar -xzf curl-8.20.0.tar.gz
cd curl-8.20.0

./configure \
    --host=x86_64-w64-mingw32 \
    --prefix=/usr/x86_64-w64-mingw32 \
    --enable-static \
    --disable-shared \
    --without-ssl \
    --enable-http \
    --enable-proxy \
    --enable-cookies \
    --enable-basic-auth \
    --enable-digest-auth \
    --disable-ftp \
    --disable-file \
    --disable-ldap \
    --disable-ldaps \
    --disable-rtsp \
    --disable-dict \
    --disable-telnet \
    --disable-tftp \
    --disable-pop3 \
    --disable-imap \
    --disable-smb \
    --disable-smtp \
    --disable-gopher \
    --disable-mqtt \
    --disable-websockets \
    --disable-bearer-auth \
    --disable-kerberos-auth \
    --disable-negotiate-auth \
    --disable-ntlm \
    --disable-tls-srp \
    --disable-aws \
    --disable-rtmp \
    --without-brotli \
    --without-zstd \
    --without-libpsl \
    --without-libssh2 \
    --without-librtmp \
    --without-libidn2 \
    --without-nghttp2 \
    --without-ngtcp2 \
    --without-nghttp3 \
    --without-quiche \
    --without-msh3 \
    --without-libgsasl \
    --without-libssh \
    --without-wolfssh \
    --without-hyper \
    --without-zlib \
    --disable-ares \
    --disable-rt \
    --disable-threaded-resolver \
    --disable-ipv6 \
    --disable-manual \
    --disable-docs \
    --disable-verbose \
    --disable-versioned-symbols \
    --disable-sspi

make -j$(nproc)
sudo make install

4. 编译本程序

# 根据自身情况判断路径
cd /path/to/esurfingclient/main
          
cmake \
    -G Ninja \
    -B build \
    -S . \
    -DCMAKE_TOOLCHAIN_FILE=toolchain-mingw64.cmake \
    -DBUILD_SHARED_LIBS=OFF

cmake --build build --target ESurfingClient -j$(nproc)

5. 然后在 build 目录就能找到 .exe 程序

Linux

Linux 的比较简单, 只需要手动编译可以被静态链接的 libcurl 即可

1. 确保安装了以下软件包

# 示例系统: Debian 13
sudo apt install build-essential \
         cmake \
         wget \
         gcc \
         g++ \
         make \
         upx-ucl \
         binutils \
         file

2. 使用指定配置编译安装 libcurl

cd /tmp
wget https://curl.se/download/curl-8.20.0.tar.gz
tar -xzf curl-8.20.0.tar.gz
cd curl-8.20.0

./configure \
    --prefix=/usr/local \
    --enable-static \
    --disable-shared \
    --without-ssl \
    --enable-http \
    --enable-proxy \
    --enable-cookies \
    --enable-basic-auth \
    --enable-digest-auth \
    --disable-ftp \
    --disable-file \
    --disable-ldap \
    --disable-ldaps \
    --disable-rtsp \
    --disable-dict \
    --disable-telnet \
    --disable-tftp \
    --disable-pop3 \
    --disable-imap \
    --disable-smb \
    --disable-smtp \
    --disable-gopher \
    --disable-mqtt \
    --disable-websockets \
    --disable-bearer-auth \
    --disable-kerberos-auth \
    --disable-negotiate-auth \
    --disable-ntlm \
    --disable-tls-srp \
    --disable-aws \
    --disable-rtmp \
    --without-brotli \
    --without-zstd \
    --without-libpsl \
    --without-libssh2 \
    --without-librtmp \
    --without-libidn2 \
    --without-nghttp2 \
    --without-ngtcp2 \
    --without-nghttp3 \
    --without-quiche \
    --without-msh3 \
    --without-libgsasl \
    --without-libssh \
    --without-wolfssh \
    --without-hyper \
    --without-zlib \
    --disable-ares \
    --disable-rt \
    --disable-threaded-resolver \
    --disable-ipv6 \
    --disable-unix-sockets \
    --disable-manual \
    --disable-docs \
    --disable-verbose \
    --disable-versioned-symbols

make -j$(nproc)
sudo make install

3. 编译本程序

export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH

# 根据自身情况判断路径
cd /path/to/esurfingclient/main

cmake . -B build

cd build

make -j$(nproc)

4. 在当前目录就能找到编译出来的程序

macOS

Note

和 Linux 的差不多

而且毕竟我不怎么会用 macOS, 所以就不赘述了

具体可看相应的工作流

OpenWRT 主程序包

OpenWRT 包的编译比较麻烦

1. 确保安装了以下软件包

# 示例系统: Debian 13
sudo apt install -y build-essential \
                    clang \
                    flex \
                    bison \
                    g++ \
                    gawk \
                    gcc-multilib \
                    g++-multilib \
                    gettext \
                    git \
                    libncurses5-dev \
                    libssl-dev \
                    rsync \
                    wget \
                    ca-certificates \
                    unzip \
                    file \
                    zstd \
                    python3-setuptools \
                    swig

2. 下载需要的 SDK 包

# 使用的镜像站: https://mirrors.sustech.edu.cn/openwrt/releases/
# 示例 SDK 包面向架构: mipsel_24kc
cd /tmp
wget https://mirrors.sustech.edu.cn/openwrt/releases/24.10.8/targets/malta/le/openwrt-sdk-24.10.8-malta-le_gcc-13.3.0_musl.Linux-x86_64.tar.zst
tar -I zstd -xf openwrt-sdk-24.10.8-malta-le_gcc-13.3.0_musl.Linux-x86_64.tar.zst

Note

如果需要编译 apk 包则需要下载 OpenWRT 25.12.x 及以上版本的 SDK 包

3. 更新 feeds 源

Warning

做这一步之前, 如果有版本号要求的话

检查 esurfingclient/main 目录下的 CMakeLists.txt 文件

找到 set(PROGRAM_VERSION_MAJOR x), set(PROGRAM_VERSION_MINOR x),set(PROGRAM_VERSION_PATCH x), set(PROGRAM_VERSION_RELEASE x) 三个选项

修改成自己要的版本号, 否则包版本号默认是 1.0.0-1

cp -r esurfingclient openwrt-sdk/package/

cd openwrt-sdk

scripts/feeds update base
scripts/feeds update packages

scripts/feeds install curl
scripts/feeds install esurfingclient

4. 修改编译配置

make defconfig

cat ../openwrt-config/all.config >> .config

make defconfig

5. 编译软件包

# 编译 libcurl 包
make package/curl/compile -j$(nproc)

# 编译本软件包
make package/esurfingclient/compile -j$(nproc)

# 不想找包的话就用这个来找, 会将包复制到当前目录下
# IPK 包查找
find bin/packages -name "esurfingclient*.ipk" -exec cp {} ./ \;
# APK 包查找
find bin/packages -name "esurfingclient*.apk" -exec cp {} ./ \;

6. 在 bin/packages 目录就能找到编译出来的包

OpenWRT LuCI

与主程序编译差不多, 但更简单, 具体参考工作流