-
Notifications
You must be signed in to change notification settings - Fork 6.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strange exported function names in official Maven build for Windows #12226
Comments
@theolivenbaum You are looking at the names of the JNI interface functions. These exist on all platforms in RocksJava binaries alongside the non-JNI functions. You should also be able to find the non-JNI (i.e. pure C++) API functions too. |
Looks like the non-JNI functions are not exported for Windows. |
@adamretter Nothing in my sleeve at the moment, but at least I can replicate what @theolivenbaum mentioned. |
Any chance this will be addressed in the next release? |
@adamretter any ideas why this is different than on the Linux/macOS builds? |
It's a limitation of linker on windows. By default it only exports from the library you are compiling, in our case rocksdbjni. To export symbols from librocksdb you need to provide def file where all symbols are explicitly mentioned. Unfortunately there is no simple solution to generate these symbols automatically. I have two ideas how to fix this, neither is best:
Radek |
Wouldn't it be possible to compile just the rocksdb library without the Java methods instead and provide it as part of the package? |
@theolivenbaum |
Not sure if relevant in this case, but just found this: https://cmake.org/cmake/help/latest/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.html
More info here too. |
Another question about the JNI builds: are they built with or without the jemalloc / tcmalloc flags? |
Without jemalloc/tcmalloc. We are not at this time planning to support jemalloc/tcmalloc in the Windows builds of RocksJava that are released. If you need that, you will have to build your own binaries. The binaries we release aim to be as portable as possible and have minimal optimisations enabled. |
Perfect, just wanted to confirm that! I've added on our end a separate build for Linux (on top of using the JNI r)eleases) so we can have a librocksd-jemalloc.so, because we very often hit this in production. But that is only affecting Linux so far (and it's on an old RHEL release, so maybe not an issue in newer malloc implementations). |
Hello @theolivenbaum (cc @rubo) I just updated #12246 Now we should be able to compile and release .dll on windows with rocksdb functions. The solution is not perfect, but it works. Unfortunately WINDOWS_EXPORT_ALL_SYMBOLS didn't work. It will be great if you can check the PR and test if the output .dll works for you. Radek |
I think we can consider this issue resolved. Thank you for the fix. |
Have you considered alternative solutions like updating the build script so it doesn't assume the build host's compression libraries will be present on the target machine? There should be a way to do this using our build system. Using Java artifacts for a non-Java project sounds like a less common solution, though I could be wrong. |
If you extract the .dll or .so files from the Jar file, then you really just have a binary build of RocksDB as a library. It does also include the JNI C++ API, but that is fairly light-weight, and you can use it if you wish, or just ignore it. |
I'm trying to switch our C# RockDB binding to use the official JNI builds, and that's fine for macOS and Linux, but weirdly, the function names exported for the Windows .dll files have some weird prefixes on them. When we try to use this library instead of the custom built .dll, it fails because it can't find any of the functions exported.
Expected behavior
Exported function names don't have added JAVA-related prefixes:
Actual behavior
Method names have strange prefixes, like
Java_org_rocksdb_AbstractEventListener_...
Steps to reproduce the behavior
Download the latest Windows build from Maven, open it as a zip and use DLL Export or other tools to view exported function names.
The text was updated successfully, but these errors were encountered: