I installed rust on Ubuntu and checked that version but there's rustc version error.
myunixx#LAPTOP-JSMKVSS3:~$ rustup --version
rustup 1.24.3 (ce5817a94 2021-05-31)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `(error reading rustc version)`
I need 'rustc' to use anchor test. But I can't use it due to this error. I've reinstalled rust but there's no change. How can i fix this problem?
myunixx#LAPTOP-JSMKVSS3:~/myepicproject$ anchor test
Failed to obtain package metadata: `cargo metadata` exited with an error: error: process didn't exit successfully: `rustc -vV` (exit status: 127)
--- stderr
/home/myunixx/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc: error while loading shared libraries: /home/myunixx/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/../lib/libstd-7c582493123fc1dd.so: file too short
It looks like there was an issue installing rustc, even though you have rustup. A few things you can try:
maybe Rust can fix itself: run rustup update
explicitly add a toolchain: run rustup toolchain install stable
reinstall rustup: run rustup self uninstall and then go back through the instructions at https://www.rust-lang.org/tools/install
More information about rustup at its book:
https://rust-lang.github.io/rustup/installation/index.html
Related
I am trying to achieve cross compilation in rust to the raspberry pi. However there was a linkage error while compiler:
error: linking with `cc` failed: exit status: 1
However for resolving that I have to download new linker and not use the default.
While doing so I checked the information of my raspberry system by using:
rustup show
Got the following result:
Default host: x86_64-unknown-linux-gnu
rustup home: /home/akumar/.rustup
installed targets for active toolchain
--------------------------------------
arm-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabihf
x86_64-unknown-linux-gnu
active toolchain
----------------
stable-x86_64-unknown-linux-gnu (default)
rustc 1.64.0 (a55dd71d5 2022-09-19)
Now for resolving the issue I have to download the package using the following command:
sudo apt install gcc-armv7-unknown-linux-gnueabihf
but after running the command, I am getting the following error:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gcc-armv7-unknown-linux-gnueabihf
Please try this:
sudo apt install gcc-arm-linux-gnueabihf
for build your rust project:
cargo build --target=armv7-unknown-linux-gnueabihf
Please check tool - cross: https://github.com/cross-rs/cross
Cross uses docker for build and makes libraries isolation.
I'm trying to get a .wasm file via RUSTFLAGS='-C link-arg=-s' cargo build --release --target wasm32-unknown-unknown but get the error:
error[E0463]: can't find crate for `std`
When i type rustup target add wasm32-unknown-unknown i get:
info: component 'rust-std' for target 'wasm32-unknown-unknown' is up to date
I installed Rust and Rustup separate via chocolatey.
rustc 1.58.0
rustup 1.24.3
info: The currently active rustc version is rustc 1.60.0-nightly (5e57faa78 2022-01-19)
You need to add the wasm32-unknown-unknown target for the nightly toolchain if that's what you are using:
rustup target add --toolchain nightly wasm32-unknown-unknown
I suffered the same symptoms after initialized a new cargo project on macOS but my problem was not adding to the wrong toolchain.
In my case, the problem was multiple cargo binaries. I discovered this after running which cargo and seeing it installed via homebrew. I did rustup self uninstall (perhaps unnecessary), homebrew uninstall rust and, then reinstalled rust according to the official docs and wasm32-unknown-unknown and then the cargo build --release --target wasm32-unknown-unknown command worked as expected.
I am developing my Rust project on Ubuntu 20.04.2 LTS 64bit. I have setup the project to compile for the host architecture (using cargo build) and to cross-compile for the target archicture of ARM 64bit (using cargo build --target=aarch64-unknown-linux-gnu). The project has been cross-compiling fine up until now. On the target hardware platform there are serial ports that the application will be interacting with so I have added the Serial Port crate to my project. The project still compiles fine for the Ubuntu host architecture but I can no longer get it to cross-compile for the aarch64 taget.
I have added the target to rustup:
$ rustup target list
...
aarch64-fuchsia
aarch64-linux-android
aarch64-pc-windows-msvc
aarch64-unknown-linux-gnu (installed)
aarch64-unknown-linux-musl
aarch64-unknown-none
aarch64-unknown-none-softfloat
...
And I have installed the toolchain to rustup:
$ rustup toolchain list
stable-aarch64-unknown-linux-gnu
stable-x86_64-unknown-linux-gnu (default)
When I run the cargo build command of cargo build --target=aarch64-unknown-linux-gnu I get the following error during compiling:
$ cargo build --target=aarch64-unknown-linux-gnu
Compiling libudev-sys v0.1.4
error: failed to run custom build command for `libudev-sys v0.1.4`
Caused by:
process didn't exit successfully: `/mnt/hgfs/trunk/src/application/target/debug/build/libudev-sys-c6234f1891f55461/build-script-build` (exit code: 101)
--- stdout
cargo:rerun-if-env-changed=LIBUDEV_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
cargo:rerun-if-env-changed=PKG_CONFIG_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu
cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
--- stderr
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "pkg-config has not been configured to support cross-compilation.\n\n Install a sysroot for the target platform and configure it via\n PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a\n cross-compiling wrapper for pkg-config and set it via\n PKG_CONFIG environment variable."', /home/nocker/.cargo/registry/src/github.com-1ecc6299db9ec823/libudev-sys-0.1.4/build.rs:38:41
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed
I have installed pkg-config and libudev-dev. From the terminal I can get this output to confirm that pkg-config is installed:
$ pkg-config --version
0.29.1
but when I try to check that libudev is installed I get an error response:
$ libudev
libudev: command not found
$ libudev-dev
libudev-dev: command not found
When I try to install libudev again I get:
$ sudo apt install libudev-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libudev-dev is already the newest version (245.4-4ubuntu3.4).
0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded.
When I try to install libudev-sys I get:
$ sudo apt install libudev-sys
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libudev-sys
I'm suspecting the reason that I cannot cross-compile is because of libudev but cannot figure this out. I have been trying to research how to solve this issue for a few days now but no luck with a solution. Any assistance or direction will be greatly appreciated. TIA.
If you are not dependent on some extra features you can disable the default libudev feature. Adapt the Cargo.toml this way:
serialport = {version = "4.0.1", default-features = false}
See also the description here: https://crates.io/crates/serialport
Otherwise you have to install a sysroot or wrapper. But I was not able to figure out how to do this (the solution above works fine for me). The error message I got is a little bit more meaningful:
pkg-config has not been configured to support cross-compilation.
Install a sysroot for the target platform and configure it via
PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a
cross-compiling wrapper for pkg-config and set it via PKG_CONFIG
environment variable.
I have downloaded the latest Rust nightly and added this dependency to Cargo.toml:
[dependencies.http]
git = "https://github.com/chris-morgan/rust-http.git"
I'm getting lots of errors for cargo build:
...
error: aborting due to 7 previous errors
...
error: aborting due to previous error
Could not compile `regex`.
I guess this is because some dependencies have not been updated to the latest rust version. Is it possible to download the nightly from yesterday or the day before?
Installed versions:
$ rustc --version
rustc 0.13.0-nightly (c89417130 2015-01-02 21:56:13 +0000)
$ cargo --version
cargo 0.0.1-pre-nightly (1a1868b 2014-12-31 21:39:41 +0000)
If you are using rustup (the currently preferred manner of installing Rust):
rustup install nightly-2016-06-03
If you want to use the standalone Rust installers, previous versions are kept. From this Reddit thread, which links to this Rust issue:
They are officially hosted.
wget https://static.rust-lang.org/dist/2014-12-08/rust-nightly-x86_64-apple-darwin.pkg
wget https://static.rust-lang.org/dist/2014-12-12/rust-nightly-x86_64-unknown-linux-gnu.tar.gz
If you are still using rustup.sh (not .rs), you should be able to use something like:
rustup.sh --channel=nightly --date=2016-06-03
I seem to have diverging versions of rustc and cargo (I think),
$ rustc -V
rustc 1.9.0 (e4e8b6668 2016-05-18)
$ cargo -V
cargo 0.10.0-nightly (10ddd7d 2016-04-08)
Is there a command akin to
pip install --upgrade pip
for upgrading cargo? I.e. something like
cargo install --upgrade cargo
You should update rustc and cargo based on how you installed it. If you used rustup, a rustup update should suffice. If you used a package manager or a binary installer, check those sources for an update.
rustc and cargo are shipped together, but that doesn't mean that their versions need to match. In fact, they do not match until Rust 1.26.0, when the Cargo binary was changed to print the Rust version.
I have the same versions of rustc and cargo that you do; those are the ones that correspond to the Rust 1.9 release. There's nothing to worry about.
If you really want to, you can download a nightly version of Cargo or compile your own. As long as your version exists in your PATH before the older one, it will be used.
I used to do this with my local Rust builds in order to have a version of Cargo at all, although rustup now automatically uses the cargo from the most recent stable version when there isn't one available in the current toolchain, which is nice.
tl;dr command rustup update will update both Rust and Cargo:
$ rustc --version
rustc 1.27.2 (58cc626de 2018-07-18)
$ cargo --version
cargo 1.27.0 (1e95190e5 2018-05-27)
$ rustup update stable
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2018-08-02, rust version 1.28.0 (9634041f0 2018-07-30)
info: downloading component 'rustc'
info: downloading component 'rust-std'
info: downloading component 'cargo'
info: downloading component 'rust-docs'
info: removing component 'rustc'
info: removing component 'rust-std'
info: removing component 'cargo'
info: removing component 'rust-docs'
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: installing component 'rust-docs'
$ rustc --version
rustc 1.28.0 (9634041f0 2018-07-30)
$ cargo --version
cargo 1.28.0 (96a2c7d16 2018-07-13)
You also need to change the default:
> rustc --version
rustc 1.41.0 (5e1a79984 2020-01-27)
> rustup update stable
> rustc --version
rustc 1.41.0 (5e1a79984 2020-01-27)
> rustup default stable-x86_64-apple-darwin
> rustc --version
rustc 1.47.0 (18bf6b4f0 2020-10-07)
Use cargo to update itself:
cargo install cargo --force
This recompiles the package and installs the latest version.
I decided to post this after seeing that rustup didn't update cargo to 1.57
You can edit the version of cargo and rust you're using by using the rustup cli. You can give it a specific version or specify a channel like nightly or beta.
For example:
rustup override set nightly