-
Notifications
You must be signed in to change notification settings - Fork 108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Test under musl failed for pthread_getname_np not found #142
Comments
nm libc.a |grep pthread|grep getname
in the alpine, and got:
If we find it always failed (and prepare a minimal reproducible example), we can report this problem to the libc crate. |
The minimal reproducible example: pub const MAX_THREAD_NAME: usize = 16;
fn main() {
let current_thread = unsafe { libc::pthread_self() };
let mut name = [0_i8; MAX_THREAD_NAME];
let name_ptr = &mut name as *mut libc::c_char;
let result = unsafe { libc::pthread_getname_np(current_thread, name_ptr, MAX_THREAD_NAME) };
println!("got {result}: {name:?}");
} Works under gnu: :( cargo run
Compiling libc v0.2.126
Compiling libc_test v0.1.0 (/home/xuanwo/Code/xuanwo/rust-playground/libc_test)
Finished dev [unoptimized + debuginfo] target(s) in 0.61s
Running `/home/xuanwo/Code/xuanwo/rust-playground/target/debug/libc_test`
got 0: [108, 105, 98, 99, 95, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0] But failed under :) cargo run --target x86_64-unknown-linux-musl
Compiling libc v0.2.126
Compiling libc_test v0.1.0 (/home/xuanwo/Code/xuanwo/rust-playground/libc_test)
error: linking with `cc` failed: exit status: 1
|
= note: "cc" "-m64" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/rcrt1.o" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crti.o" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtbeginS.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.14v1ez4oz89gvn8d.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.19bwhm6xg8cfwxd8.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.1o3c9hbz320wtmxb.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.23xrez8oelkz64yl.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.36lh7jgovr639e3i.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.3dtua2jmdq2gb0u8.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.3g02hgl841r9d3cs.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.3tzxoq9ztmu74bj5.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.3uuiq6dh4mmnnewr.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.3ylq0z44hxbeahss.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.47dk7yv41ygtfk2b.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.4c35m1x8k7mhb7yw.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.4j16ufoq71st6gmk.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.4khuk9o7i2l0ozkb.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.4s3i1di0iezubtv9.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.58clh0y01wpq6290.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.5ek2fbend7kd7pcv.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.5zm65zipw2ifa29.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.q413du7u7x3x7l0.rcgu.o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.550zlew0kqjetrp4.rcgu.o" "-Wl,--as-needed" "-L" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps" "-L" "/home/xuanwo/Code/xuanwo/rust-playground/target/debug/deps" "-L" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "-Wl,-Bstatic" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/liblibc-ed02612f02b4d710.rlib" "-Wl,--start-group" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd-f4c4d46e2c92f7e8.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libpanic_unwind-5718f6ffddf5ee32.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libminiz_oxide-0d1808e3fa0f4972.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libadler-867572e7d2b1a37a.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libobject-8936f277d6f129b4.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libmemchr-95bdf332c919ec2d.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libaddr2line-de517dbe5e03ebcd.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libgimli-d17001cfd16861a0.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_demangle-f1d0433ba63a9c44.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd_detect-99b2117164d979d6.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libhashbrown-fc9f890fbcf45c23.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_alloc-239281accac99750.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libunwind-bd7bf2dac51cd3a1.rlib" "-lunwind" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcfg_if-2fbf9aa7168ff1c5.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liblibc-9e3ec3da6f4fc496.rlib" "-lc" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liballoc-65234c84e13bcb9c.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_core-3fb701dea1065ada.rlib" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcore-3001270ca6eb694f.rlib" "-Wl,--end-group" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-4e10c91f6e889509.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-nostartfiles" "-L" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "-L" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained" "-o" "/home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b" "-Wl,--gc-sections" "-static-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtendS.o" "/home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtn.o"
= note: /usr/bin/ld: /home/xuanwo/Code/xuanwo/rust-playground/target/x86_64-unknown-linux-musl/debug/deps/libc_test-45164251b81adc9b.1o3c9hbz320wtmxb.rcgu.o: in function `libc_test::main':
/home/xuanwo/Code/xuanwo/rust-playground/libc_test/src/main.rs:7: undefined reference to `pthread_getname_np'
collect2: error: ld returned 1 exit status
= help: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
= note: use the `-l` flag to specify native libraries to link
= note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)
error: could not compile `libc_test` due to previous error I'm confirmed that xuanwo/rust-playground/libc_test is 📦 v0.1.0 via 🦀 v1.60.0
:( paru -Q musl
musl 1.2.3-1
xuanwo/rust-playground/libc_test is 📦 v0.1.0 via 🦀 v1.60.0
:) nm /usr/lib/musl/lib/libc.a |grep pthread|grep getname
nm: cache.lo: no symbols
nm: __invtrigl.lo: no symbols
nm: ceill.lo: no symbols
nm: expm1l.lo: no symbols
nm: truncl.lo: no symbols
pthread_getname_np.lo:
0000000000000000 T pthread_getname_np
nm: tls.lo: no symbols |
It looks like |
There is test coverage for musl in rust-libc, but it doesn't help much in this case because the pthread_getname_np test is disabled until the test environment is updated to an newer version of musl. Your test code works for me, although my musl rust setup is not completely standard:
Is it possible your libc.a is coming from somewhere else besides |
Thanks for explaining.
Nice catch. Based on failed log, /home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/libc.a :) nm /home/xuanwo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/libc.a | grep pthread_getname_np
@BusyJay also confirmed that rust has it's own bundled musl: tikv/jemallocator#30 (comment) |
Oh, I found this workaround: RUSTFLAGS="-C target-feature=-crt-static" cargo run --target x86_64-unknown-linux-musl |
It's pretty wired. I run
nm libc.a |grep pthread|grep getname
in the alpine, and got:But I came across the same issue you faced. I will approve and merge this PR to make it work under musl (and I'll investigate further why it cannot link with this symbol)
Originally posted by @YangKeao in #140 (comment)
The text was updated successfully, but these errors were encountered: