rust 交叉编译windows 32位程序时遇到的问题
问题
问题在我交叉编译rustdesk
代码时遇到,错误显示引用的包libsodium-sys
在连接时错误,原因发现这个包没有按预期编译出32位版本还是64位版本。
虽然成功编译出了32位版本,但之后测试发现32位release版本仍然存在功能不可正常执行的问题。 还未具体查找到原因。
定位
在libsodium-sys
源代码的build.rs
中看到:
#[cfg(all(target_env = "msvc", target_pointer_width = "32"))]
fn get_lib_dir() -> PathBuf {
if is_release_profile() {
get_crate_dir().join("msvc/Win32/Release/v142/")
} else {
get_crate_dir().join("msvc/Win32/Debug/v142/")
}
}
#[cfg(all(target_env = "msvc", target_pointer_width = "64"))]
fn get_lib_dir() -> PathBuf {
if is_release_profile() {
get_crate_dir().join("msvc/x64/Release/v142/")
} else {
get_crate_dir().join("msvc/x64/Debug/v142/")
}
}
配置错误信息发现原因是target_pointer_width
不等于”32”而造成。
解决
在github上提交issue#98271得到解决方法
$ rustup toolchain install stable-i686
$ cargo +stable-i686 build
深入
$ cargo --help
Rust's package manager
USAGE:
cargo [+toolchain] [OPTIONS] [SUBCOMMAND]
OPTIONS:
-V, --version Print version info and exit
--list List installed commands
--explain <CODE> Run `rustc --explain CODE`
-v, --verbose Use verbose output (-vv very verbose/build.rs output)
-q, --quiet Do not print cargo log messages
--color <WHEN> Coloring: auto, always, never
--frozen Require Cargo.lock and cache are up to date
--locked Require Cargo.lock is up to date
--offline Run without accessing the network
--config <KEY=VALUE> Override a configuration value (unstable)
-Z <FLAG> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for
details
-h, --help Print help information
Some common cargo commands are (see all commands with --list):
build, b Compile the current package
check, c Analyze the current package and report errors, but don't build object files
clean Remove the target directory
doc, d Build this package's and its dependencies' documentation
new Create a new cargo package
init Create a new cargo package in an existing directory
run, r Run a binary or example of the local package
test, t Run the tests
bench Run the benchmarks
update Update dependencies listed in Cargo.lock
search Search registry for crates
publish Package and upload this package to the registry
install Install a Rust binary. Default location is $HOME/.cargo/bin
uninstall Uninstall a Rust binary
See 'cargo help <command>' for more information on a specific command.
Common Options
+toolchain
If Cargo has been installed with rustup, and the first argument to cargo begins with +,
it will be interpreted as a rustup toolchain name (such as +stable or +nightly).
See the [rustup documentation](https://rust-lang.github.io/rustup/overrides.html)
for more information about how toolchain overrides work.