使用货物构建-清单路径会大大增加WASM二进制大小



我正在用两个不同的命令行构建相同的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所在的文件夹中执行货物构建。

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,而第一个没有。编译标志可以通过多种方式传递:作为env变量或作为.forge/config的一部分。首先要弄清楚为什么cargo忽略了它,可能会让人筋疲力尽,我只建议始终将其编译为RUSTFLAGS="-C link-arg=-s" cargo build --release --target wasm32-unknown-unknown

相关内容

  • 没有找到相关文章

最新更新