-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Open
Labels
A-linkageArea: linking into static, shared libraries and binariesArea: linking into static, shared libraries and binariesC-enhancementCategory: An issue proposing an enhancement or a PR with one.Category: An issue proposing an enhancement or a PR with one.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
I encountered an issue with the linkme crate on illumos (OpenSolaris/OmniOS/Helios) demonstrated with this repo. Of note, the build executes without error or warning, but in fact the linker is emitting an error:
$ cargo run
Compiling cmd v0.1.0 (/home/ahl/linkme-test/cmd)
Finished dev [unoptimized + debuginfo] target(s) in 0.28s
Running `target/debug/cmd`
$ cargo rustc
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
I can make the linker fail on warnings:
$ cargo rustc -- -C link-arg=-Wl,-zfatal-warnings
Compiling cmd v0.1.0 (/home/ahl/linkme-test/cmd)
error: linking with `gcc` failed: exit code: 1
|
= note: "gcc" "-m64" "-std=c99" "-L" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.1m65hci6o5zni2mr.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.1r2sofzghiioxykg.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.2i3xjlynwxgqlmzu.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.3hvsf4zj59kihrhf.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.3lsh1pzemq0xblzm.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.3zpatajw7m7uqqns.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.4yxic0y84aboqmeb.rcgu.o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.a1lfmxsp6lqzsbn.rcgu.o" "-o" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69" "/home/ahl/linkme-test/cmd/target/debug/deps/cmd-26e8351dc3f3fb69.3n70o9wfzqm9tbsh.rcgu.o" "-Wl,-zignore" "-nodefaultlibs" "-L" "/home/ahl/linkme-test/cmd/target/debug/deps" "-L" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib" "-Wl,-Bstatic" "/home/ahl/linkme-test/cmd/target/debug/deps/liblib-3d689bd64c3873d5.rlib" "/home/ahl/linkme-test/cmd/target/debug/deps/liblinkme-21c998585e123796.rlib" "-Wl,--start-group" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libstd-cd23cc7e75a2851c.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libpanic_unwind-566bad254d0594e5.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libminiz_oxide-96e54319d1590148.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libadler-4dbe2335326bb316.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libobject-b0fd875741b20fc0.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libaddr2line-089ce7b4c263282a.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libgimli-ca92a564b7883a12.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/librustc_demangle-ce8ee413f3ea18b6.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libhashbrown-17e15682bef35ec2.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/librustc_std_workspace_alloc-2dc950a425ee77d8.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libunwind-50867a64287c1bd2.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libcfg_if-129bada4e936c5a0.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/liblibc-a98e4fa0f203a39a.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/liballoc-35c480f88f8f320a.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/librustc_std_workspace_core-86dc76527c7e216a.rlib" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libcore-093275d7382c1a2f.rlib" "-Wl,--end-group" "/opt/ooce/rust/lib/rustlib/x86_64-unknown-illumos/lib/libcompiler_builtins-358913705748e96c.rlib" "-Wl,-Bdynamic" "-lsocket" "-lposix4" "-lpthread" "-lresolv" "-lnsl" "-lumem" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-Wl,-zfatal-warnings" "-lssp"
= note: ld: warning: reserved symbol '__start_set_linkme_DOERS' already defined in file /home/ahl/linkme-test/cmd/target/debug/deps/liblib-3d689bd64c3873d5.rlib(lib-3d689bd64c3873d5.2vwi8dtk7ky9hvmq.rcgu.o)
ld: warning: reserved symbol '__stop_set_linkme_DOERS' already defined in file /home/ahl/linkme-test/cmd/target/debug/deps/liblib-3d689bd64c3873d5.rlib(lib-3d689bd64c3873d5.2vwi8dtk7ky9hvmq.rcgu.o)
collect2: error: ld returned 1 exit status
error: aborting due to previous error
error: could not compile `cmd`.
To learn more, run the command again with --verbose.
These linker warnings need not have been fatal, but I think it would be reasonable for cargo build
/ cargo run
/ cargo rustc
to display these warnings. In this case those warnings would have helped determine the underlying issues much earlier. Indeed, it seems rare that linker warnings would truly be specious.
Meta
rustc --version --verbose
:
$ rustc --version --verbose
rustc 1.47.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-illumos
release: 1.47.0
LLVM version: 11.0
madsmtm
Metadata
Metadata
Assignees
Labels
A-linkageArea: linking into static, shared libraries and binariesArea: linking into static, shared libraries and binariesC-enhancementCategory: An issue proposing an enhancement or a PR with one.Category: An issue proposing an enhancement or a PR with one.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.