Repository navigation
UnsatisfiedLinkError: no objectbox-jni-windows-x64 when installed to Program Files #1225
Description
Activity
The .dll file is not included when the installer installs the executable.
By default the library file is extracted into the working directory from the JAR resources when ObjectBox code is first run. See NativeLibraryLoader. It looks like that default behavior doesn't work for a Kotlin Multiplatform app?
Assuming that extracting doesn't work, the solution is likely to manually include the library and make sure it's placed in the correct location before the app uses ObjectBox APIs. You can find the library included in the platform-specific JAR, so for Windows in the Maven artifact
io.objectbox:objectbox-windows.- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationmore info requiredFurther information is requestedFurther information is requestedand removedbugSomething isn't workingSomething isn't working
on Dec 1, 2025 The .dll file is not included when the installer installs the executable.
By default the library file is extracted into the working directory from the JAR resources when ObjectBox code is first run. See NativeLibraryLoader. It looks like that default behavior doesn't work for a Kotlin Multiplatform app?
Assuming that extracting doesn't work, the solution is likely to manually include the library and make sure it's placed in the correct location before the app uses ObjectBox APIs. You can find the library included in the platform-specific JAR, so for Windows in the Maven artifact
io.objectbox:objectbox-windows.I've found the root cause. When installed in Program Files, the app lacks the permissions to extract the DLL file at runtime. If installed in a directory other than Program Files, the DLL is generated successfully, and the app starts normally.
- removedmore info requiredFurther information is requestedFurther information is requested
on Dec 2, 2025 - changed the title
[-]I couldn't create objectbox-jni-windows-x64[/-][+]UnsatisfiedLinkError: no objectbox-jni-windows-x64 when installed to Program Files[/+]on Dec 8, 2025 Thanks for the update!
The proper solution to install to (the write protected) Program Files on Windows would be to install the DLL into the application installation directory. I'm not sure how to do this when using Kotlin Multiplatform build tools, but maybe we should at least provide general documentation on how to extract and bundle the required ObjectBox database library file(s) for desktop applications.
Reacted by WooSeongJunThanks for the update!
The proper solution to install to (the write protected) Program Files on Windows would be to install the DLL into the application installation directory. I'm not sure how to do this when using Kotlin Multiplatform build tools, but maybe we should at least provide general documentation on how to extract and bundle the required ObjectBox database library file(s) for desktop applications.
I tried modifying build.gradle to include the DLL during the installation phase as you suggested, but unfortunately, it didn't work. If preparing the official documentation is going to take some time, could you please provide a temporary solution or instructions right here?
could you please provide a temporary solution or instructions right here?
I already told you that the DLL can be extracted from the Maven JAR artifact (and it also is automatically extracted if running the app during testing). Bundling that file in the installation archive or executable is specific to the build system and setup.
Reacted by WooSeongJunI am running into the same issue with Windows and macOS. Even if we bundled and extracted on our own, this line would still throw the error.
Is there a way to override this?
Or at the very least allow the developer to configure where to look and extract that file. Like skiko does it here.@greenrobot-team As it stands, right now objectbox is unusable for KMP apps on macOS and windows.
Even if we bundled and extracted on our own, this line would still throw the error.
Could you share an example project for us to reproduce this? Maybe this is also related to a newer JDK or the OS disallowing System.load?
allow the developer to configure where to look and extract that file. Like skiko does it here.
I guess I'll convert this issue into a feature request then! For anyone else interested, please thumbs up the first comment!
Edit: for our reference, this is internal issue
objectbox-java#301The
Program Filesinstall path may be exposing either a space-in-path issue or a native library extraction/permission issue. It would help to include the exact app install path, the directory where ObjectBox tries to extract/loadobjectbox-jni-windows-x64, and whether running the same app from a user-writable path works. That should make it clear whether the fix belongs in path quoting or native library extraction fallback logic.The
Program Filesinstall path may be exposing either a space-in-path issue or a native library extraction/permission issue.The API library expects to find the database library for the current platform in the working directory. The code is open, check it yourself: NativeLibraryLoader
Also, apps typically don't have write access when being installed in Windows Program Files. Hence, the recommendation above to pre-package the extracted database library file and install it at the expected location.
Anyhow, are you saying you have found an issue in the
NativeLibraryLoadercode? Then please feel free to create a new GitHub issue and share details.
Is there an existing issue?
Build info
Steps to reproduce
I am building a KMP project with ObjectBox. When I run the jvmApp module directly (e.g., from the IDE), the ObjectBox .dll file is found and loaded correctly.
However, when I build a distributable package for deployment (e.g., using jpackage), the .dll file seems to be missing from the final package, causing it to fail at runtime.
What could be the problem?
(I apologize for asking this again. I posted this on StackOverflow, but since I haven't received a response yet, I'm posting it here as well.)
Expected behavior
Create objectbox-jni-windows-x64, when the installer installs the executable.
Actual behavior
The .dll file is not included when the installer installs the executable.
Code
Code
settings.gradle.kts(root)
build.gradle.kts(:jvmApp)
build.gradle.kts(:data-jvm)
Logs, stack traces
Logs