Building
The output is build/lodestone_client.dll (the client, injected into Minecraft)
and build/lodestone-inject.exe (the loader), both 64-bit Windows binaries built
with mingw-w64 g++.
The easy way (Windows): build.exe
Double-click build.exe in this folder. The first run downloads a portable
toolchain (w64devkit, ~73 MB) into a w64devkit\ subfolder — nothing is
installed system-wide and no admin rights are needed — then compiles everything.
Later runs skip the download and just recompile. No JDK required: jni.h is
vendored under third_party/jni.
When it finishes you'll have build\lodestone_client.dll and
build\lodestone-inject.exe, and it prints the DLL's imports so you can see it
depends only on system libraries.
With make
If you'd rather use make (or you're on Linux), you need mingw-w64 g++ and GNU make; no JDK. Then:
Linux (cross-compile):
sudo apt install g++-mingw-w64-x86-64 make # Debian/Ubuntu
make
Windows, MSYS2 MINGW64 shell:
pacman -S mingw-w64-x86_64-toolchain make
make CXX=g++ CC=gcc OBJDUMP=objdump
Windows, WinLibs + make from cmd.exe (put WinLibs' bin on PATH):
make
To build against a specific JDK's headers instead of the vendored jni.h, pass
JAVA_INC, e.g. make JAVA_INC="C:/Program Files/Java/jdk-25/include".
Checking the result
The DLL must import only KERNEL32, USER32, GDI32, OPENGL32 and
msvcrt — never libstdc++-6.dll, or it fails to inject with "a dependency is
missing". build.exe and the make build both print this list; check it any
time with:
w64devkit\bin\objdump -p build\lodestone_client.dll | findstr "DLL Name"