Skip to content

Using impl trait across crates results in linker error #35870

Closed
@jplatte

Description

@jplatte

I have a small test case that doesn't work in its current state (split into two crates), producing a linker error; but works when everything is moved into one crate: https://github.com/jplatte/rust-impl-trait-across-crates

Error:

   Compiling bin v0.1.0 (file:///home/jplatte/Projekte/rust-impl-trait-across-crates/bin)
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/jplatte/Projekte/rust-impl-trait-across-crates/bin/target/debug/bin.0.o" "-o" "/home/jplatte/Projekte/rust-impl-trait-across-crates/bin/target/debug/bin" "-Wl,--gc-sections" "-pie" "-nodefaultlibs" "-L" "/home/jplatte/Projekte/rust-impl-trait-across-crates/bin/target/debug/deps" "-L" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/home/jplatte/Projekte/rust-impl-trait-across-crates/bin/target/debug/deps/liblib.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librand-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcollections-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_unicode-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_jemalloc-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-411f48d3.rlib" "/home/jplatte/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-411f48d3.rlib" "-l" "dl" "-l" "pthread" "-l" "gcc_s" "-l" "pthread" "-l" "c" "-l" "m" "-l" "rt" "-l" "util" "-l" "compiler-rt"
  = note: /home/jplatte/Projekte/rust-impl-trait-across-crates/bin/target/debug/bin.0.o: In function `{{inlined-root}}::next<core::slice::Iter<u32>,closure>':
/buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/obj/../src/libcore/iter/mod.rs:953: undefined reference to `lib::Thing::even_elems::_$u7b$$u7b$closure$u7d$$u7d$::h337a400b104ae277'
collect2: error: ld returned 1 exit status


error: aborting due to previous error

error: Could not compile `bin`.

To learn more, run the command again with --verbose.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-impl-traitArea: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch.A-linkageArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions