52 lines
1.5 KiB
Markdown
52 lines
1.5 KiB
Markdown
# 零点传输协议
|
||
|
||
用于控制数据包如何交换,工作在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
|
||
~~~ |