Cargo: "target doesn't support these crate types" error on x86_64-unknown-linux-musl host

Created on 20 Jul 2019  路  2Comments  路  Source: rust-lang/cargo

Problem

I'm trying to build an library with proc-macro for x86_64-unknown-linux-musl target.

When the host is x86_64-unknown-linux-gnu it can be compiled successfully.

However, when the host is x86_64-unknown-linux-gnu, Cargo outputs this error:

error: cannot produce proc-macro for `proc_macro_lib v0.1.0 (/proc-macro-lib)` as the target `x86_64-unknown-linux-musl` does not support these crate types

As I understand, there should be no difference, as the target is the same and no C libraries from the host are used.


Steps

I've created this repository to reproduce the problem using Docker.

Running

docker-compose up --build host-gnu

runs cargo build for a library with proc-macro = true with host x86_64-unknown-linux-gnu and target x86_64-unknown-linux-musl, it builds the library successfully.

However, running

docker-compose up --build host-must

outputs the error mentioned above.
Notes

Output of cargo version:

cargo 1.36.0 (c4fcfb725 2019-05-15)
C-bug

Most helpful comment

In case someone else hits this page, my build worked using the flags commented at rust-lang/rust#59302
i.e.: RUSTFLAGS="-C target-feature=-crt-static"

All 2 comments

Thanks for the detailed repro! I think the issue is that rustc for musl does not support dynamic linking. Proc-macros have to be dynamic libraries as they are loaded by rustc. I'm not up-to-speed on what is blocking this, but I think https://github.com/rust-lang/rust/issues/59302 is the main issue for tracking this.

One option is to use the gnu host with --target for musl.

I'm going to close this as this is a rustc issue.

In case someone else hits this page, my build worked using the flags commented at rust-lang/rust#59302
i.e.: RUSTFLAGS="-C target-feature=-crt-static"

Was this page helpful?
0 / 5 - 0 ratings

Related issues

alilleybrinker picture alilleybrinker  路  3Comments

oblique picture oblique  路  3Comments

ehuss picture ehuss  路  3Comments

SimonSapin picture SimonSapin  路  3Comments

dotnetspec picture dotnetspec  路  3Comments