Hi,
I'm fairly new to OpenWrt build system and I'm trying to compile a simple helloworld Rust app using Ubuntu 20.04.6 LTS and OpenWrt v23.05 with glibc. I'm facing an error when the make file is working on the rust/host
dependency, it seems it is trying to use a newer glibc than the one available in the host (Ubuntu). Here is a snippet of the error:
Compiling proc-macro2 v1.0.60
error: failed to run custom build command for `proc-macro2 v1.0.60`
Caused by:
process didn't exit successfully: `/home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build` (exit status: 1)
--- stderr
/home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build)
/home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build)
/home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/anevarez/git/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.73.0-src/build/bootstrap/debug/build/proc-macro2-d0a6868b9c6387d3/build-script-build)
For reference:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ getconf GNU_LIBC_VERSION
glibc 2.31
On the same machine I can install Rust via curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=1.73.0 -y
and use it to compile the sample program without any issues.
Does anyone has a suggestion on how to solve this?
brada4
October 4, 2024, 6:38pm
2
Is it linking to host glibc?
I guess , I though it should use the one provided by OpenWrt, but not sure. If it was using it, why would this error occur
This seems to be a bug with package/rust/host
when using glibc. I tried downloading a fresh copy of the code. Follow the instructions described here: https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem . Using make menuconfig
I selected x86_64 and changed libc from musl
to glibc
(No custom modifications). Continuing with the instructions, build world
:
make -j$(nproc) defconfig download clean world
Once it successfully finished, I tried to build rust/host:
make -j1 V=s package/rust/host/compile
and I get the same error:
$ make -j1 V=s package/rust/host/compile
make[2]: Entering directory '/home/anevarez/build/openwrt/scripts/config'
make[2]: 'conf' is up to date.
make[2]: Leaving directory '/home/anevarez/build/openwrt/scripts/config'
make[1]: Entering directory '/home/anevarez/build/openwrt'
make[2]: Entering directory '/home/anevarez/build/openwrt/feeds/packages/lang/rust'
. /home/anevarez/build/openwrt/include/shell.sh; /home/anevarez/build/openwrt/staging_dir/host/bin/libdeflate-gzip -dc /home/anevarez/build/openwrt/dl/rustc-1.80.1-src.tar.gz | tar -C /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/.. -xf -
[ ! -d ./src/ ] || cp -fpR ./src/* /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src
Applying /home/anevarez/build/openwrt/feeds/packages/lang/rust/patches/0001-Update-xz2-and-use-it-static.patch using plaintext:
patching file src/bootstrap/Cargo.toml
Applying /home/anevarez/build/openwrt/feeds/packages/lang/rust/patches/0003-bump-libc-deps-to-0.2.146.patch using plaintext:
patching file vendor/elasticlunr-rs-3.0.2/Cargo.lock
patching file vendor/libffi-3.2.0/Cargo.lock
touch /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/.prepared9388c6f52a846e342ef6ec61ca4ad92a_6664517399ebbbc92a37c5bb081b5c53
(cd /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/; if [ -x configure ]; then cp -fpR /home/anevarez/build/openwrt/scripts/config.{guess,sub} /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src// && CC="gcc" CFLAGS="-O2 -I/home/anevarez/build/openwrt/staging_dir/host/include -I/home/anevarez/build/openwrt/staging_dir/hostpkg/include -I/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/include" CXX="g++" CPPFLAGS="-I/home/anevarez/build/openwrt/staging_dir/host/include -I/home/anevarez/build/openwrt/staging_dir/hostpkg/include -I/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/include" CXXFLAGS="" LDFLAGS="-L/home/anevarez/build/openwrt/staging_dir/host/lib -L/home/anevarez/build/openwrt/staging_dir/hostpkg/lib -L/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/lib" CONFIG_SHELL="/usr/bin/env bash" CARGO_HOME="/home/anevarez/build/openwrt/dl/cargo" bash ./configure --build=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu,x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --prefix=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host --bindir=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/bin --libdir=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/lib --sysconfdir=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/etc --datadir=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/share --mandir=/home/anevarez/build/openwrt/staging_dir/target-x86_64_glibc/host/man --dist-compression-formats=gz --disable-sanitizers --release-channel=stable --enable-cargo-native-static --bootstrap-cache-path=/home/anevarez/build/openwrt/dl/rustc --set=llvm.download-ci-llvm=true --set=target.x86_64-unknown-linux-gnu.ar=x86_64-openwrt-linux-gnu-gcc-ar --set=target.x86_64-unknown-linux-gnu.cc=x86_64-openwrt-linux-gnu-gcc --set=target.x86_64-unknown-linux-gnu.cxx=x86_64-openwrt-linux-gnu-g++ --set=target.x86_64-unknown-linux-gnu.linker=x86_64-openwrt-linux-gnu-gcc --set=target.x86_64-unknown-linux-gnu.ranlib=x86_64-openwrt-linux-gnu-gcc-ranlib --set=target.x86_64-unknown-linux-gnu.crt-static=false ; fi )
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--target ...
configure: build.build := x86_64-unknown-linux-gnu
configure: build.target := ['x86_64-unknown-linux-gnu', 'x86_64-unknown-l ...
configure: build.host := ['x86_64-unknown-linux-gnu']
configure: install.prefix := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: install.bindir := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: install.libdir := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: install.sysconfdir := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: install.datadir := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: install.mandir := /home/anevarez/build/openwrt/staging_dir/targe ...
configure: dist.compression-formats := ['gz']
configure: build.sanitizers := False
configure: rust.channel := stable
configure: build.cargo-native-static := True
configure: build.bootstrap-cache-path := /home/anevarez/build/openwrt/dl/rustc
configure: llvm.download-ci-llvm := True
configure: target.x86_64-unknown-linux-gnu.ar := x86_64-openwrt-linux-gnu-gcc-ar
configure: target.x86_64-unknown-linux-gnu.cc := x86_64-openwrt-linux-gnu-gcc
configure: target.x86_64-unknown-linux-gnu.cxx := x86_64-openwrt-linux-gnu-g++
configure: target.x86_64-unknown-linux-gnu.linker := x86_64-openwrt-linux-gnu-gcc ...
configure: target.x86_64-unknown-linux-gnu.ranlib := x86_64-openwrt-linux-gnu-gcc ...
configure: target.x86_64-unknown-linux-gnu.crt-static := False
configure: profile := dist
configure:
configure: writing `config.toml` in current directory
configure:
configure: run `python /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/x.py --help`
touch /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/.configured
CARGO_HOME=/home/anevarez/build/openwrt/dl/cargo TARGET_CFLAGS="-Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/rust-1.80.1=rust-1.80.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" python3 /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/x.py --build-dir /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build --config /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/config.toml dist build-manifest cargo llvm-tools rustc rust-std rust-src
extracting /home/anevarez/build/openwrt/dl/rustc/2024-06-13/rust-std-1.79.0-x86_64-unknown-linux-gnu.tar.xz
extracting /home/anevarez/build/openwrt/dl/rustc/2024-06-13/rustc-1.79.0-x86_64-unknown-linux-gnu.tar.xz
extracting /home/anevarez/build/openwrt/dl/rustc/2024-06-13/cargo-1.79.0-x86_64-unknown-linux-gnu.tar.xz
Building bootstrap
Compiling proc-macro2 v1.0.76
Compiling cfg-if v1.0.0
Compiling unicode-ident v1.0.12
Compiling typenum v1.17.0
Compiling version_check v0.9.4
Compiling memchr v2.7.1
Compiling libc v0.2.155
Compiling rustix v0.38.28
Compiling serde v1.0.195
Compiling cc v1.0.97
error: failed to run custom build command for `proc-macro2 v1.0.76`
Caused by:
process didn't exit successfully: `/home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build` (exit status: 1)
--- stderr
/home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build)
/home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build)
/home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/bootstrap/debug/build/proc-macro2-cfb5d0879a2ccf9b/build-script-build)
warning: build failed, waiting for other jobs to finish...
failed to run: /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/src/bootstrap/Cargo.toml
Build completed unsuccessfully in 0:00:15
make[2]: *** [Makefile:109: /home/anevarez/build/openwrt/build_dir/target-x86_64_glibc/host/rustc-1.80.1-src/.built] Error 1
make[2]: Leaving directory '/home/anevarez/build/openwrt/feeds/packages/lang/rust'
time: package/feeds/packages/rust/host-compile#29.43#28.05#43.34
ERROR: package/feeds/packages/rust [host] failed to build.
make[1]: *** [package/Makefile:127: package/feeds/packages/rust/host/compile] Error 1
make[1]: Leaving directory '/home/anevarez/build/openwrt'
make: *** [/home/anevarez/build/openwrt/include/toplevel.mk:233: package/rust/host/compile] Error 2
Any suggestions on how to fix this?
If I switch back the libc to musl
, make world
and try to build rust again, it builds without any issues