JNI нужно загрузить DSO в Linux, имя которого не начинается с lib - PullRequest
0 голосов
/ 23 июня 2019

Я искал ответ на этот вопрос (здесь и на других сайтах) и не нашел подходящего решения. Поэтому я выкладываю вопрос здесь:

Мне нужно обернуть некоторый код C классом Java, используя JNI в Linux. Имя C dso в linux - at_base.so, а не lib at_base.so, это по историческим причинам, и я предпочитаю не менять имя dso, хотя я добавил несколько новых методов, которые будут использоваться классом Java (как нативные методы, вызываемые JNI). Я попытался загрузить DSO, используя полный путь DSO, как это:

{
    File f = new File("/opt/my_company/my_product/lib/at_base.so");
    System.out.println(f.getAbsoluteFile() + " exists = " + f.exists() );
    System.load(f.getAbsolutePath());
}

Запуск этого файла показывает, что dso at_base.so существует, но загрузка не удалась, что приводит к ошибке UnsatisfiedLink. Здесь нет проблем с путями, так как если я добавлю символическую ссылку lib at_base.so, которая указывает на at_base.so (в том же каталоге /opt/.../lib), это решит проблему. Кажется, что хотя я предоставляю полный путь dso к java "/opt/my_company/my_product/lib/at_base.so", он все равно пытается загрузить lib at_base.so по указанному пути.

Мой вопрос: есть ли способ заставить Java загружать dso, давая ему точное имя, без необходимости иметь имя библиотеки, начинающееся с lib .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...