Skip to content
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

How to skip native library extraction? #165

Open
tobiascapin opened this issue Feb 14, 2024 · 7 comments
Open

How to skip native library extraction? #165

tobiascapin opened this issue Feb 14, 2024 · 7 comments

Comments

@tobiascapin
Copy link

Is it possibile to disable the automatic native library extraction?
I'm providing the native library in the java.library.path, so I would like to avoid the temp file extraction. However I see an empty temp nativelib-loader_xxxxxxxxxxxxx folder is created every time when I open a serial port.

Thanks for your support.

@hiddenalpha
Copy link

I don't know the loader part. I don't know if it can be disabled.

It feels as such a feature could help us too. AFAIK our project is using a custom (as in handmade) build which completely strips the loader library plus some of the unused libs away. Due to this, our project is stuck with an old release and this feature may enable us to jump back to the officially released artifacts again.

@tobiascapin
Copy link
Author

tobiascapin commented Feb 14, 2024

I could remove it forking the project and removing this lines from SerialNativeInterface.java:

 NativeLoader.setJniExtractor(new DefaultJniExtractorStub(null, System.getProperty("jssc.boot.library.path")));
 NativeLoader.loadLibrary("jssc");

and replacing them with

System.loadLibrary("jssc");

I wanted to avoid org.scijava.nativelib dependency, this is the reason why I replaced NativeLoader.loadLibrary line too.

I don't like to have a custom version, I hope somehow will be possibile to disable the nativeload by some future option.

@pietrygamat
Copy link
Collaborator

This has been tackled in #92. Are you using jssc 2.9.3+?

@tresf

This comment was marked as outdated.

@tresf
Copy link

tresf commented Feb 14, 2024

Whoops, nevermind,.@pietrygamat answered it already.

@tresf
Copy link

tresf commented Feb 14, 2024

@pietrygamat
Copy link
Collaborator

pietrygamat commented Feb 14, 2024

After closer inspection, the reported issue: empty directory being created is actually true regardless of using jssc.boot.library.path property. JSSC will load native lib from library/classpath or specified boot path if present, so it will skip the extraction step, however empty temp dir (removed at jvm exit) is there anyway.

There is no obvious way to work around that, as it happens in NativeLoader class static initialization block - something that should maybe be reported upstream?

I wanted to avoid org.scijava.nativelib dependency

You mean as in remove nativelib jar from the classpath? Not untill references are removed from java files. Which means the logic for finding correct lib to load must be either rewritten within JSSC (back to its roots) or excluded from this project and then either ceded onto end users (breaking any compatibility) or extracted to a separate artifact to be used by users relying on that. Given how much controversy any aproach to locating libs packaged inside the jar causes, no option seems better than the next ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants