From ab259422f0e4864421b79be79d66727d5e809bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=BB=E9=AD=82=E5=9C=A3=E4=BD=BF?= Date: Sun, 23 Feb 2025 23:51:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=E4=BA=A4=E5=8F=89=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cargo/config.toml | 3 +++ README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..b77d5f3 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.aarch64-linux-android] +linker = "aarch64-linux-android35-clang" +ar = "llvm-ar" \ No newline at end of file diff --git a/README.md b/README.md index 96fbc4b..28529b4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,52 @@ # 零点传输协议 -用于控制数据包如何交换,工作在TCP协议栈之上。 \ No newline at end of file +用于控制数据包如何交换,工作在TCP协议栈之上。 + +## 交叉编译 + +由于LingTransmit依赖于openssl,所以你需要为目标操作系统交叉编译openssl。 +以Android aarch64为例 + +~~~ bash +git clone https://github.com/openssl/openssl.git +cd openssl +export ANDROID_NDK_HOME=/home/ling/Android/Sdk/ndk/28.0.12916984/ +export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64 +export TARGET=aarch64-linux-android +export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME +export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH + +# 生成构建清单,指定安装目录为/home/ling/Android/openssl/aarch64,no-shared表示构建静态库 +./Configure android-arm64 -D__ANDROID_API__=34 --prefix=/home/ling/Android/openssl/aarch64 -DOPENSSL_STATIC=1 no-shared + +make -j15 +make install +~~~ + +然后需要设置一些环境变量,使得Cargo找到需要使用的库。 + +~~~ bash +export OPENSSL_DIR=/home/ling/Android/openssl/aarch64 +export OPENSSL_LIB_DIR=$OPENSSL_DIR/lib +export OPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include + +# 允许 pkg-config 跨平台查找 +export PKG_CONFIG_ALLOW_CROSS=1 +export PKG_CONFIG_PATH=$OPENSSL_DIR/lib/pkgconfig +export PKG_CONFIG_SYSROOT_DIR=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot +~~~ + +然后,在项目根目录创建 *.cargo/config.toml* 并添加: + +~~~ toml +[target.aarch64-linux-android] +linker = "aarch64-linux-android-clang" +ar = "llvm-ar" +~~~ + +最后,即可清理缓存并重新构建 + +~~~ bash +cargo clean +cargo build --release --target=aarch64-linux-android +~~~ \ No newline at end of file