rust-lang / rust-bindgen

Automatically generates Rust FFI bindings to C (and some C++) libraries.
https://rust-lang.github.io/rust-bindgen/
BSD 3-Clause "New" or "Revised" License
4.23k stars 679 forks source link

--target=wasm32-unknown-unknown: 'stdio.h' file not found #2829

Open ahaoboy opened 2 months ago

ahaoboy commented 2 months ago

Input C/C++ Header

#include <stdio.h>

Bindgen Invocation

 bindgen ./test.h -o test.rs  -- --target=wasm32-unknown-unknown

stdlib.h, inttypes.h, string.h, assert.h also have the same problem

Actual Results

./test.h:1:10: fatal error: 'stdio.h' file not found
panicked at bindgen-cli/main.rs:52:36:
Unable to generate bindings: ClangDiagnostic("./test.h:1:10: fatal error: 'stdio.h' file not found\n")

Expected Results

No errors and compiled successfully

pvdrz commented 2 months ago

you need to tell clang where to find such headers for that platform.

ahaoboy commented 2 months ago

you need to tell clang where to find such headers for that platform.

Can you explain this in more detail? How do I use the parameters passed to clang, because I don't know where the header files are exactly, and using other targets, it doesn't give me an error, is it because the environment is missing some libraries?

 bindgen ./test.h -o test.rs  -- --target=x86_64-unknown-linux-gnu
pvdrz commented 1 month ago

Yes, clang cannot find any stdio.h header for the wasm32-unknown-unknown target in the directories where system headers usually are. So you need to get the right toolchain for that target or use a target for which you actually have the headers.

I haven't ever cross compiled to wasm but I found this post stating that wasm32-unknown-unknown requires a special toolchain.

ahaoboy commented 1 month ago

I found this post stating that wasm32-unknown-unknown requires a special toolchain.

This shows that many people have encountered the same problem, but we must use some cumbersome methods to bypass this problem. Using new toolchains such as zig-cc will increase the complexity. And this blog seems to be released on 2023-01-01, we can only look forward to subsequent support.

pvdrz commented 1 month ago

I don't think we can do anything from the bindgen side to alleviate this.