Godot Version
4.3 built from source via github
Question
Hi,
I’m trying to link a static library into a module as shown here:
I’ve follow the steps as closely as a I can with the exception that I’m on windows, and the library I’m linking is flecs (GitHub - SanderMertens/flecs: A fast entity component system (ECS) for C & C++). This meant I built the library via visual studio’s makefile handling and then dropped the entire folder into a module (/modules/test_module/flecs). I set the SCsub file as follows to account for lib handling on windows:
# SCsub
Import('env')
env.add_source_files(env.modules_sources, "*.cpp")
env.Append(CPPPATH=["flecs"])
# Note I used a specific file name due to: https://github.com/godotengine/godot/issues/23687
env.Append(LIBPATH=["flecs/out/build/x64-Debug"])
env.Append(LIBS=[File('flecs/out/build/x64-Debug/flecs_static.lib')])
This seems to find the code and .lib ok but when I include flecs.h in a cpp file it fails to build godot with a linker error and a bunch of (probably related) linker warnings:
1>LINK : warning LNK4217: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'flecs_static.lib(deserialize.c.obj)' in function 'flecs_binary_expr_do'
1>LINK : warning LNK4217: symbol 'atol' defined in 'libucrt.lib(atox.obj)' is imported by 'flecs_static.lib(cursor.c.obj)' in function 'ecs_meta_set_string'
...about 150 more instances of LNK4217...
1>flecs_static.lib(plecs.c.obj) : error LNK2019: unresolved external symbol __imp_rewind referenced in function flecs_load_from_file
1>bin\godot.windows.editor.dev.x86_64.exe : fatal error LNK1120: 1 unresolved externals
I’m useless with build systems and makefiles but from reading around, the warnings are potentially a conflicting version of those functions in the static library vs in godot’s build. The error seems to be a completely missing function flecs needs, but I don’t understand make projects or libs enough to know what more to look into.
Note I tried running the exact same build of the lib against a cpp console app and it worked correctly, so I’m guessing it’s some interaction between Godot and Flecs.
Anyone got any idea what I’m doing wrong here?