使用 cargo build --manifest-path 结果大大增加了 WASM 二进制大小

Using cargo build --manifest-path results to greatly increases WASM binary size

我正在使用两个不同的命令行构建相同的 Cargo.toml。这是为了构建 NEAR 协议智能合约。

首先使用--manifest-path

cargo build --manifest-path contract/Cargo.toml --release --target wasm32-unknown-unknown
...
Finished release [optimized] target(s) in 23.25s
ls -lha contract/target/wasm32-unknown-unknown/release 
...
-rwxr-xr-x   2 moo staff 1.7M Oct  5 12:32 nep9000_pool.wasm*
-rwxr-xr-x   2 moo staff 1.8M Oct  5 12:32 nep9000_token.wasm*

二进制文件的大小为 1.8 兆字节。

然后我从 Cargo.toml 所在的文件夹中执行 cargo build。

cd contract 
cargo build --release --target wasm32-unknown-unknown  
Finished release [optimized] target(s) in 22.85s
ls -lha target/wasm32-unknown-unknown/release
-rwxr-xr-x   2 moo staff 127K Oct  5 12:35 nep9000_pool.wasm*
-rw-r--r--   1 moo staff  305 Sep 30 21:09 nep9000_token.d
-rwxr-xr-x   2 moo staff 189K Oct  5 12:35 nep9000_token.wasm*

在后一种方法中,二进制大小要小 10 倍。

这是为什么?上面的 cargo 命令有何不同?

我假设第二个构建选择了编译标志 -C link-arg=-s 而第一个没有。编译标志可以通过多种方式传递:as env variable or as part of .cargo/config。试图弄清楚为什么 cargo 一开始就忽略它可能会让人筋疲力尽,我只是建议始终将其编译为 RUSTFLAGS="-C link-arg=-s" cargo build --release --target wasm32-unknown-unknown