Skip to content
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

zig cc: unsupported linker args (--as-needed, -Bstatic, -Bdynamic, and more) #10050

Closed
philipahlberg opened this issue Oct 28, 2021 · 15 comments
Closed
Labels
enhancement Solving this issue will likely involve adding new logic or components to the codebase. zig cc Zig as a drop-in C compiler feature
Milestone

Comments

@philipahlberg
Copy link

philipahlberg commented Oct 28, 2021

Zig Version

0.9.0-dev.1444+e2a2e6c14

Steps to Reproduce

In a nutshell:

$ CC=zig-cc; cargo install ripgrep --target aarch64-unknown-linux-gnu

zig-cc:

#! /bin/sh
zig cc -target aarch64-linux-gnu $@

The list of unsupported linker args is:

  • --as-needed
  • -Bstatic
  • -Bdynamic
  • -znoexecstack
  • -zrelro
  • -znow

See philipahlberg/rust-zig-cc-docker for exact steps to reproduce.

Expected Behavior

It compiles succesfully, installing the binary onto the machine.

Actual Behavior

error: linking with `zig-cc` failed: exit status: 1
  |
  = note: "zig-cc" "-m64" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.0.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.1.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.10.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.11.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.12.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.13.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.14.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.15.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.2.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.3.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.4.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.5.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.6.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.7.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.8.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.rg.06b2166d-cgu.9.rcgu.o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01.3zb7x5h83gps4ewl.rcgu.o" "-Wl,--as-needed" "-L" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps" "-L" "/tmp/cargo-installnriGM3/release/deps" "-L" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libnum_cpus-36e4020310cff317.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep-d44cdc2a83b6f418.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep_regex-d3e18b4a1f63be0a.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep_printer-40ab05ecd46c3ff5.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libbase64-29cc4e04355e990f.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libserde_json-c6b34b534a688d52.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libryu-79e8a334f9d41d46.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libitoa-3ea878dd6c3f39ef.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libserde-2d356b4c07cc2654.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep_searcher-a66c46bc63e18545.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libmemmap2-695259d505f60861.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libencoding_rs_io-05f12fb3fe3540d1.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libencoding_rs-4f1d034d1dfea496.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libbytecount-c6aba2f4e9097a9f.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep_matcher-f2de09a669ddc60b.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libgrep_cli-09f0a207944dc72c.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libatty-6c32e73a59db6c45.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/liblibc-deb81cd183bf489b.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libtermcolor-54eec0f2c345eb5e.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libclap-5740de3b7c246e71.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libtextwrap-76be0833b16f4ded.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libunicode_width-61ed1d1c4af228f1.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libstrsim-87afea28899fb881.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libbitflags-346b928a6373e84f.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libignore-a48e2e9b2c1b9c37.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libcrossbeam_utils-0d4890e416d4cc48.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libwalkdir-041010beb3f43ac9.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libsame_file-e06f8f37e672ac4e.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libthread_local-fe1e38e113f0cc37.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libonce_cell-6bc255586f692b5c.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libglobset-f0dd44c472a216b8.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libfnv-f7ba8d2c0d18870a.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/liblog-d62c0c501a4c0277.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libcfg_if-bce0c30997effda1.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libregex-2cb84b6b69f0a69c.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libregex_syntax-6d75059dd0b825d0.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libbstr-e68ccf328a38811c.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/liblazy_static-9adf3f02eb04fff8.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libregex_automata-17697a180156e98d.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libaho_corasick-b2524b2f2f5c9e50.rlib" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/libmemchr-1304c82c3851ad91.rlib" "-Wl,--start-group" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-8adcca4f1427867b.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-8e7e86a00adbd98f.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-b69fd8507c8409af.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-2dff396b99681a6b.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-a78bd5aa183c7115.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-846c64d5a2fbc5ee.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-24c09062b6dc787b.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-ce93f351ca41a57b.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-6db383740f17d227.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-514cb174319eb6d4.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-37c1534c42bc4f8c.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-06d0f7780fda2fd9.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-a847e4fa8cfb7240.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-88bb1ba4dd271224.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-08dbb7feabf67599.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-0b5a376b429677a6.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-2a6a2797f7a73818.rlib" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-0e3656b1fda5fd7b.rlib" "-Wl,--end-group" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-eecefd843a0dbc02.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/usr/local/rustup/toolchains/nightly-aarch64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/tmp/cargo-installnriGM3/x86_64-unknown-linux-gnu/release/deps/rg-963575bbbc333e01" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs"
  = note: warning: unsupported linker arg: --as-needed
          warning: unsupported linker arg: -Bstatic
          warning: unsupported linker arg: -Bdynamic
          warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          ld.lld: error: unable to find library -lgcc_s


error: failed to compile `ripgrep v13.0.0`, intermediate artifacts can be found at `/tmp/cargo-installnriGM3`

Caused by:
  could not compile `ripgrep` due to previous error

Note: the error message is with an aarch64 host targeting x86_64. The description swaps these arround, assuming that is the more common case.

@philipahlberg philipahlberg added the bug Observed behavior contradicts documented or intended behavior label Oct 28, 2021
@leecannon
Copy link
Contributor

leecannon commented Oct 28, 2021

It looks like cargo is passing gcc linker flags, im not 100% sure how to tell it to pass lld ones but i have found rust-lang/rust#40018 which might let you do it.

@S0urc3C0de
Copy link

LLD supports these arguments just fine, although I'm not sure why it's telling you they were unsupported.
Anyway, those are only warnings. The error here is that the linker cannot find libgcc_s.

@philipahlberg
Copy link
Author

The error here is that the linker cannot find libgcc_s.

I see. Do you know how I can fix this?

@nitsky
Copy link

nitsky commented Nov 1, 2021

Hi @philipahlberg there are two workarounds I am aware of:

  1. Write a linker wrapper that swaps out -lgcc_s for -lunwind.
  2. Use the unstable build-std feature in cargo to force the standard library to link to a linker-provided libunwind with build-std-features=system-llvm-libunwind.

The second option is much better but requires nightly.

@matpow2
Copy link

matpow2 commented Nov 16, 2021

We are considering using zig cc as a cross-compiler for our games, and we also ran into the issue where --as-needed doesn't work as a linker flag currently. Should we create a new issue for this or does this issue cover it?

@andrewrk andrewrk added enhancement Solving this issue will likely involve adding new logic or components to the codebase. zig cc Zig as a drop-in C compiler feature and removed bug Observed behavior contradicts documented or intended behavior labels Nov 20, 2021
@andrewrk andrewrk added this to the 0.10.0 milestone Nov 20, 2021
andrewrk added a commit that referenced this issue Nov 26, 2021
@andrewrk andrewrk modified the milestones: 0.11.0, 0.9.0 Nov 26, 2021
@andrewrk
Copy link
Member

--as-needed landed in 4e5a88b.
-Bdynamic / -Bstatic landed in eec825c.
-zrelro, -znow, -znoexecstack landed in 2cdffc9.

for ld.lld: error: unable to find library -lgcc_s you'll have to figure out how to omit -lgcc_s from the command line; this argument should not be passed to zig cc. Although I would consider a proposal to make zig cc simply ignore this argument, since zig will always provide compiler_rt and libunwind as needed, fulfilling the same dependency thath -lgcc_s is intended to provide.

@12101111
Copy link

12101111 commented Dec 1, 2021

#10056 add support of -z relro, but the code can't parse options without space after z, like -zrelro

zig cc -znow
error: Unknown Clang option: '-znow'
error: linking with `/home/han/Project/build-std/./cc.sh` failed: exit status: 1
  |
  = note: "/home/han/Project/build-std/./cc.sh" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.292wgn9bv2cum0za.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.2b95inpmmllixgnm.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3ueuc7c49saj6v4j.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4t74fwrel4votf3a.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4vojiuhjovgv0c5k.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.51uhep1xb38fx972.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.fepp1vjw3i2xeov.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3hkhin1t13cxeop0.rcgu.o" "-Wl,--as-needed" "-L" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps" "-L" "/usr/obj/rust/debug/deps" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd-06d497214c34ac6a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libpanic_unwind-0fdbcbcba0199ab8.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd_detect-6961260dea3e34ca.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_demangle-176d7fafccd7bf9a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libhashbrown-900ee581e833ae82.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_alloc-8ac0997514b54007.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind-41fc3f599e9defd1.rlib" "-lunwind" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcfg_if-a3af76a0b218b42c.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liblibc-d08a26209b9c1d6e.rlib" "-lc" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liballoc-9198430eca6e22f1.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_core-3479d034fd94fba6.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcore-46b88295de009149.rlib" "-Wl,--end-group" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcompiler_builtins-5fc89a7e8a821986.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531" "-Wl,--gc-sections" "-static" "-no-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs"
  = note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          error: static library 'unwind' not found. search paths:
           /usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind.a
           /usr/obj/rust/debug/deps/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           suggestion: use full paths to static libraries on the command line rather than using -l and -L arguments


error: could not compile `build-std` due to previous error

@andrewrk
Copy link
Member

andrewrk commented Dec 1, 2021

-zrelro is not supported by clang:

andy@ark ~/tmp [1]> ~/local/llvm13-release/bin/clang-13 -c test.c -zrelro
clang-13: error: unknown argument: '-zrelro'

The space is required:

andy@ark ~/tmp> ~/local/llvm13-release/bin/clang-13 -c test.c -z relro
clang-13: warning: -z relro: 'linker' input unused [-Wunused-command-line-argument]

@Blues-star
Copy link

#10056 add support of -z relro, but the code can't parse options without space after z, like -zrelro

zig cc -znow
error: Unknown Clang option: '-znow'
error: linking with `/home/han/Project/build-std/./cc.sh` failed: exit status: 1
  |
  = note: "/home/han/Project/build-std/./cc.sh" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.292wgn9bv2cum0za.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.2b95inpmmllixgnm.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3ueuc7c49saj6v4j.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4t74fwrel4votf3a.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4vojiuhjovgv0c5k.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.51uhep1xb38fx972.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.fepp1vjw3i2xeov.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3hkhin1t13cxeop0.rcgu.o" "-Wl,--as-needed" "-L" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps" "-L" "/usr/obj/rust/debug/deps" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd-06d497214c34ac6a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libpanic_unwind-0fdbcbcba0199ab8.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd_detect-6961260dea3e34ca.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_demangle-176d7fafccd7bf9a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libhashbrown-900ee581e833ae82.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_alloc-8ac0997514b54007.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind-41fc3f599e9defd1.rlib" "-lunwind" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcfg_if-a3af76a0b218b42c.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liblibc-d08a26209b9c1d6e.rlib" "-lc" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liballoc-9198430eca6e22f1.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_core-3479d034fd94fba6.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcore-46b88295de009149.rlib" "-Wl,--end-group" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcompiler_builtins-5fc89a7e8a821986.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531" "-Wl,--gc-sections" "-static" "-no-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs"
  = note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          error: static library 'unwind' not found. search paths:
           /usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind.a
           /usr/obj/rust/debug/deps/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           suggestion: use full paths to static libraries on the command line rather than using -l and -L arguments


error: could not compile `build-std` due to previous error

I try to use zig as the linker of cargo,but I got the same output like you ,I wonder how you solve it?

[...]
warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          error: static library 'unwind' not found. search paths:
           G:\work2\Rust\task\target\x86_64-unknown-linux-musl\debug\deps\libunwind.a
           G:\work2\Rust\task\target\debug\deps\libunwind.a
           H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\libunwind.a
           H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\libunwind.a
           suggestion: use full paths to static libraries on the command line rather than using -l and -L arguments
[...]

if i try to force zig cc to include the rust libunwind.a in rust's self-contained folder,I receive

= note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          ld.lld: error: duplicate symbol: __init_tp
          >>> defined at __init_tls.c:15 (../src_musl/src/env\__init_tls.c:15)
          >>>            __init_tls.lo:(__init_tp) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at __init_tls.c
          >>>            C:\Users\46983\AppData\Local\zig\o\af3a71f24d2e3ccd156b129d762931a6\__init_tls.o:(.text.__init_tp+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __copy_tls
          >>> defined at __init_tls.c:40 (../src_musl/src/env\__init_tls.c:40)
          >>>            __init_tls.lo:(__copy_tls) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at __init_tls.c
          >>>            C:\Users\46983\AppData\Local\zig\o\af3a71f24d2e3ccd156b129d762931a6\__init_tls.o:(.text.__copy_tls+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __progname
          >>> defined at libc.c
          >>>            libc.lo:(__progname) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at libc.c
          >>>            C:\Users\46983\AppData\Local\zig\o\b164e385537f42963b3873ff91351013\libc.o:(.bss.__progname+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __progname_full
          >>> defined at libc.c
          >>>            libc.lo:(__progname_full) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at libc.c
          >>>            C:\Users\46983\AppData\Local\zig\o\b164e385537f42963b3873ff91351013\libc.o:(.bss.__progname_full+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __get_handler_set
          >>> defined at sigaction.c:21 (../src_musl/src/signal\sigaction.c:21)
          >>>            sigaction.lo:(__get_handler_set) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__get_handler_set+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __libc_sigaction
          >>> defined at sigaction.c:27 (../src_musl/src/signal\sigaction.c:27)
          >>>            sigaction.lo:(__libc_sigaction) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__libc_sigaction+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __sigaction
          >>> defined at sigaction.c:81 (../src_musl/src/signal\sigaction.c:81)
          >>>            sigaction.lo:(__sigaction) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__sigaction+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

this is my rustflag in my cargo config

rustflags = ["-C",  "linker-flavor=gcc","-C", "link-self-contained=no"]

@Blues-star
Copy link

#10056添加对 的支持-z relro,但代码无法解析没有空格后的选项z,例如-zrelro

zig cc -znow
error: Unknown Clang option: '-znow'
error: linking with `/home/han/Project/build-std/./cc.sh` failed: exit status: 1
  |
  = note: "/home/han/Project/build-std/./cc.sh" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.292wgn9bv2cum0za.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.2b95inpmmllixgnm.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3ueuc7c49saj6v4j.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4t74fwrel4votf3a.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.4vojiuhjovgv0c5k.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.51uhep1xb38fx972.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.fepp1vjw3i2xeov.rcgu.o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531.3hkhin1t13cxeop0.rcgu.o" "-Wl,--as-needed" "-L" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps" "-L" "/usr/obj/rust/debug/deps" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd-06d497214c34ac6a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libpanic_unwind-0fdbcbcba0199ab8.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libstd_detect-6961260dea3e34ca.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_demangle-176d7fafccd7bf9a.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libhashbrown-900ee581e833ae82.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_alloc-8ac0997514b54007.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind-41fc3f599e9defd1.rlib" "-lunwind" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcfg_if-a3af76a0b218b42c.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liblibc-d08a26209b9c1d6e.rlib" "-lc" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/liballoc-9198430eca6e22f1.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/librustc_std_workspace_core-3479d034fd94fba6.rlib" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcore-46b88295de009149.rlib" "-Wl,--end-group" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libcompiler_builtins-5fc89a7e8a821986.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-o" "/usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/build_std-e9ce5198f1eaa531" "-Wl,--gc-sections" "-static" "-no-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs"
  = note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          error: static library 'unwind' not found. search paths:
           /usr/obj/rust/aarch64-unknown-linux-musl/debug/deps/libunwind.a
           /usr/obj/rust/debug/deps/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           /home/han/.rustup/toolchains/nightly-x86_64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind.a
           suggestion: use full paths to static libraries on the command line rather than using -l and -L arguments


error: could not compile `build-std` due to previous error

我尝试使用zig作为cargo的链接器,但我得到了和你一样的输出,不知道你是怎么解决的?

[...]
警告:不支持的链接器参数:-znoexecstack
          警告:不支持的链接器参数:-zrelro
          警告:不支持的链接器参数:-znow
          错误:未找到静态库“展开”。搜索路径:
           G: \w ork2 \R ust \t ask \t arget \x 86_64-unknown-linux-musl \d ebug \d eps \l ibunwind.a
           G: \w ork2 \R ust \t ask \t arget \d ebug \d eps \l ibunwind.a
           H: \R ustTools \r ustup \t oolchains \n ightly-x86_64-pc-windows-msvc \l ib \r ustlib \x 86_64-unknown-linux-musl \l ib \l ibunwind.a
           H: \R ustTools \r ustup \t oolchains \n ightly-x86_64-pc-windows-msvc \l ib \r ustlib \x 86_64-unknown-linux-musl \l ib \l ibunwind.a
           建议:在命令行上使用静态库的完整路径,而不是使用 -l 和 -L 参数
[...]

如果我尝试强制 zig cc 在 rust 的自包含文件夹中包含 rust libunwind.a,我会收到

= note: warning: unsupported linker arg: -znoexecstack
          warning: unsupported linker arg: -zrelro
          warning: unsupported linker arg: -znow
          ld.lld: error: duplicate symbol: __init_tp
          >>> defined at __init_tls.c:15 (../src_musl/src/env\__init_tls.c:15)
          >>>            __init_tls.lo:(__init_tp) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at __init_tls.c
          >>>            C:\Users\46983\AppData\Local\zig\o\af3a71f24d2e3ccd156b129d762931a6\__init_tls.o:(.text.__init_tp+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __copy_tls
          >>> defined at __init_tls.c:40 (../src_musl/src/env\__init_tls.c:40)
          >>>            __init_tls.lo:(__copy_tls) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at __init_tls.c
          >>>            C:\Users\46983\AppData\Local\zig\o\af3a71f24d2e3ccd156b129d762931a6\__init_tls.o:(.text.__copy_tls+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __progname
          >>> defined at libc.c
          >>>            libc.lo:(__progname) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at libc.c
          >>>            C:\Users\46983\AppData\Local\zig\o\b164e385537f42963b3873ff91351013\libc.o:(.bss.__progname+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __progname_full
          >>> defined at libc.c
          >>>            libc.lo:(__progname_full) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at libc.c
          >>>            C:\Users\46983\AppData\Local\zig\o\b164e385537f42963b3873ff91351013\libc.o:(.bss.__progname_full+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __get_handler_set
          >>> defined at sigaction.c:21 (../src_musl/src/signal\sigaction.c:21)
          >>>            sigaction.lo:(__get_handler_set) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__get_handler_set+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __libc_sigaction
          >>> defined at sigaction.c:27 (../src_musl/src/signal\sigaction.c:27)
          >>>            sigaction.lo:(__libc_sigaction) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__libc_sigaction+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

          ld.lld: error: duplicate symbol: __sigaction
          >>> defined at sigaction.c:81 (../src_musl/src/signal\sigaction.c:81)
          >>>            sigaction.lo:(__sigaction) in archive H:\RustTools\rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-unknown-linux-musl\lib\liblibc-e25734a7bb04e2b6.rlib
          >>> defined at sigaction.c
          >>>            C:\Users\46983\AppData\Local\zig\o\c1e904f6950ebd5bfb86dd411e0cd4ba\sigaction.o:(.text.__sigaction+0x0) in archive C:\Users\46983\AppData\Local\zig\o\ef61335e4de553e9fa432a04a7282cc3\libc.a

这是我的货物配置中的 rustflag

rustflags = ["-C",  "linker-flavor=gcc","-C", "link-self-contained=no"]

sorry,i solved it , I found the all the duplicate symbol are in the same rlib file ,and i remove them by hand in build script,now it works fine , just a little trouble

@PiotrSikora
Copy link
Contributor

for ld.lld: error: unable to find library -lgcc_s you'll have to figure out how to omit -lgcc_s from the command line; this argument should not be passed to zig cc. Although I would consider a proposal to make zig cc simply ignore this argument, since zig will always provide compiler_rt and libunwind as needed, fulfilling the same dependency thath -lgcc_s is intended to provide.

Could we do that? It seems fairly reasonable for zig cc to ignore -lgcc_s when it's providing the same functionality using different libraries.

The workarounds suggested here work fine, but those are all one-offs, and don't help to fulfill zig cc's promise of being a drop-in replacement for GCC/Clang.

@andrewrk
Copy link
Member

andrewrk commented Feb 9, 2022

Done in 2836cd5.

@PiotrSikora
Copy link
Contributor

Awesome, thank you!

@sfackler
Copy link
Contributor

sfackler commented Feb 23, 2022

Since libgcc_s also includes the exception handling functions, I think zig cc also needs to link to libunwind when -lgcc_s is passed. Otherwise you end up with the linker unable to find _Unwind_RaiseException, etc.

@andrewrk
Copy link
Member

Thanks for pointing that out @sfackler - done in 88d1258

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Solving this issue will likely involve adding new logic or components to the codebase. zig cc Zig as a drop-in C compiler feature
Projects
None yet
Development

No branches or pull requests

10 participants