JNI: оптимальная практика загрузки библиотеки и файл заголовка Scala (.h) - PullRequest
0 голосов
/ 22 сентября 2019

Что является лучшей идеей для следующего:

У меня есть библиотека Scala, которая работает на BSD (MacOS X, FreeBSD) / Linux / Windows через вызовы функций JNI, и прежде чем я вызову некоторую функцию @native, мне нужно загрузить библиотеку JNI, т.е. .so, .dylib, .dll

структура проекта:

/ common (код Scala)

/ windows (Cкод и привязка класса Scala)

/ macos (код C и привязка класса Scala)

/ linux (привязка кода C и класса Scala)

текущее простое решение (для MacOSX и если установлен gcc):

(Process(s"cd c_native_path_src") ### Process(s"gcc -dynamiclib -O3 " +
    "-I/System/Library/Frameworks/JavaVM.framework/Headers " +
    "-I/usr/include " +
    "-I$JAVA_HOME/include " +
    s"-I$$JAVA_HOME/include/darwin" +
    s"$some_path/src/lib_native_util.c " +
    s"-o $some_path/$libPath/$libName$.dylib"))

, что является лучшим решением?я пробовал CMake, но ничего не помогло, к сожалению

кстати, еще один вопрос: если у меня есть заголовок для файла класса Scala / Java, который я уже сгенерировал, будет ли он работать на других платформах?например, если я уже сгенерировал заголовок для своего класса Scala (он был в BSD / MacOS), будет ли он работать в Windows / Linux при компиляции исходного кода C для @native функций?

...