Как добавить файл .so в файл java.library.path в Linux
Я работаю с java-приложением, которому нужен файл .dll
в java.library.path в окнах. Для запуска такого же приложения в Linux у меня есть соответствующий .so
файл, который следует добавить в java.library.path
в Linux-машине, я пока не нашел для этого простого решения.
Я поместил .so
в папку, которая уже находится в пути к классу, но мое приложение все еще жалуется, что в java.library.path
нет файла
.so
Я бы хотел найти:
- Способы добавления
.so
в java.library.path
- Как узнать, добавлено ли уже добавленное (добавлено)
Ответы
Ответ 1
Добавьте содержащий каталог в LD_LIBRARY_PATH
перед запуском приложения
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/pathOfContainingDirectory
Используйте java -XshowSettings:properties
чтобы показать значение java.library.path (и других).
Ответ 2
У меня возникли проблемы с этим, пожалуйста, убедитесь, что у вас есть префикс lib
в имени библиотеки.
Итак, шаги,
-
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"
-
Переименуйте библиотеки, чтобы lib был префиксом. [Добавить это как часть сборки script]
mv JNIDemo.so libJNIDemo.so
Проверьте этот ответ для подробного объяснения fooobar.com/questions/158300/...
Ответ 3
Я использовал метод java -XshowSettings: properties и нашел путь к ранее установленной папке и скопировал мой файл в эту папку
Ответ 4
File file = null;
private String[] libs_path = System.getProperty("java.library.path").split(":");
public boolean isInstalled() {
boolean isInstalled = false;
for(String lib : libs_path) {
file = new File(lib+"/"+"yourlib.so");
if(file.exists()) {
isInstalled = true;
break;
}
}
return isInstalled;
}
public void install() {
if(!isInstalled) {
for(String lib: lib_path) {
// copy your .so to lib
break;
}
}
}
Ответ 5
Я считаю, что это лучший способ сделать это, так как для этого нужно создать только одну единственную ссылку, не нужно редактировать файлы, не нужно экспортировать или запускать исходный код до запуска приложения. И никаких линий bashrc не требуется.
Тем не менее, при обновлении это может привести к непреднамеренным ошибкам в будущих выпусках Java, поскольку это может привести к загрузке устаревшей библиотеки, хотя удаление одной ссылки также решает эту проблему.
Это работает под Ubuntu 18.04 с установленным java 11 opensdk.
$ locate libjawt.so
$ java -XshowSettings:properties
Из двух команд, приведенных выше, вы можете найти два пути, которые вам понадобятся для настройки вашей системы.
sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so
Я сделал символическую ссылку для java ll, чтобы открыть sdk, чтобы найти библиотеку, и у меня было следующее, потому что /usr/lib - один из путей в выводе. В моем выводе есть путь java, который вы можете использовать вместо /usr/lib, если вы хотите сохранить библиотеку java (даже символические ссылки) вместе.
sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so