GithubHelp home page GithubHelp logo

Comments (15)

adamretter avatar adamretter commented on April 28, 2024 2

@rubo if that is the case, then we may need to tweak the CMake build that is used for Windows. @rhubner any ideas on this one?

from rocksdb.

rhubner avatar rhubner commented on April 28, 2024 2

@theolivenbaum
Yes, but then it will double the size of the distribution package(.jar) and code will be there twice. Once as librocksdb.dll and second as librocksdbjni.dll

from rocksdb.

theolivenbaum avatar theolivenbaum commented on April 28, 2024 1

Not sure if relevant in this case, but just found this: https://cmake.org/cmake/help/latest/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.html

This can be used to export symbols from a .dll that are not in any of its object files 
but are added by the linker from dependencies (e.g. msvcrt.lib).

More info here too.

from rocksdb.

theolivenbaum avatar theolivenbaum commented on April 28, 2024 1

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).

from rocksdb.

rhubner avatar rhubner commented on April 28, 2024 1

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

from rocksdb.

adamretter avatar adamretter commented on April 28, 2024

@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.

from rocksdb.

rubo avatar rubo commented on April 28, 2024

Looks like the non-JNI functions are not exported for Windows.

from rocksdb.

rhubner avatar rhubner commented on April 28, 2024

@adamretter Nothing in my sleeve at the moment, but at least I can replicate what @theolivenbaum mentioned.

from rocksdb.

rubo avatar rubo commented on April 28, 2024

Any chance this will be addressed in the next release?

from rocksdb.

adamretter avatar adamretter commented on April 28, 2024

@rubo It depends on timing. We have a draft PR that @rhubner has prepared but it is still far from ideal (as it currently means having to list all files to export symbols from). We need to find a better approach in that PR - if you have ideas?

from rocksdb.

theolivenbaum avatar theolivenbaum commented on April 28, 2024

@adamretter any ideas why this is different than on the Linux/macOS builds?

from rocksdb.

rhubner avatar rhubner commented on April 28, 2024

@theolivenbaum

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:

  1. First compile rocksdb.dll and then export all symbols and with some PowerShell magic prepare def file.
  2. Change build that rocksdb and rocksjni will be compiled together. At the moment we first compile rocksdb to .lib and then we compile rocksdbjni.dll and link together.

Radek

from rocksdb.

theolivenbaum avatar theolivenbaum commented on April 28, 2024

Wouldn't it be possible to compile just the rocksdb library without the Java methods instead and provide it as part of the package?

from rocksdb.

theolivenbaum avatar theolivenbaum commented on April 28, 2024

Another question about the JNI builds: are they built with or without the jemalloc / tcmalloc flags?

from rocksdb.

rhubner avatar rhubner commented on April 28, 2024

@theolivenbaum

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.

from rocksdb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.