godotengine / godot-cpp

C++ bindings for the Godot script API
MIT License
1.67k stars 504 forks source link

Web export fails due to Uncaught LinkError #1553

Open 2shady4u opened 3 weeks ago

2shady4u commented 3 weeks ago

Godot version

v4.3-stable

godot-cpp version

4.3

System information

Windows 10

Issue description

Exporting to web fails because of following error:

TypeError: a.default.detectStore(...) is undefined h1-check.js:1:1301
Uncaught (in promise) LinkError: imported function 'env._ZNSt3__29to_stringEx' signature mismatch

I have tried exporting with both threads enabled and disabled and I get the same issue. I used Firefox, Chrome and Vivaldi and all of them report the same error.

My build system uses Emscripten v3.1.39 and can be found here: https://github.com/2shady4u/godot-sqlite

Steps to reproduce

Minimal reproduction project

demo.zip

2shady4u commented 3 weeks ago

I have tried re-compiling my binaries using Emscripten 3.1.64 (as found here), but I get the exact same error...

Faless commented 1 week ago

Possibly related issue: https://github.com/godotengine/godot/issues/96492 .

We should test if this is a regression from https://github.com/godotengine/godot/pull/93853

Nihlus commented 1 week ago

I believe I found the problem - there's a compilation flag mismatch between godot-cpp and godot proper, meaning that -sWASM_BIGINT is not present (among a number of other flags). This flag changes the representation of 64-bit integers in the compiled code, resulting in types like long long having different signatures between the builds.

The solution is to add this flag to the compilation, but there should probably be a review of the rest of the flags as well. There's also some discrepancies when using the CMake support in godot-cpp, but that's probably better as a separate issue.