У меня это отлично работает в Windows - приложение загружает мой плагин (C ++, Qt), мой плагин выполняет интеллектуальный поиск, чтобы найти установленную JRE, соответственно устанавливает путь поиска в библиотеке и затем вызывает функцию в JVM, котораяпринудительно загружает jvm.dll в этот момент.(Предыдущий вопрос: Как развернуть смешанное приложение на C ++ / Java (JNI)? )
Теперь я пытаюсь заставить его работать на Linux.Из того, что я прочитал, ленивое связывание / загрузка было по умолчанию, поэтому я подумал, что это будет просто работать ... не похоже на это.
Я бы хотел избежать dlopen()
и dlsym()
, LD_LIBRARY_PATH
, ldconfig
и т. Д. Идея состоит в том, что пользователи этого плагина не должны знать, как все это работает, они просто помещают plugin.so в нужное место, и когда он загружается, плагинимеет ум, чтобы найти JRE (или сказать пользователю установить JRE).
Можно ли это сделать?
РЕДАКТИРОВАТЬ
Просто длябыть ясным ... ошибка, которую я получаю при загрузке плагина: "Невозможно загрузить библиотеку /home/dan/blah/blah/libMyPlugin.so: (libjawt.so: невозможно открыть общий объектный файл: такого файла или каталога нет")
РЕДАКТИРОВАТЬ
Если это имеет значение ... это должно работать на Ubuntu 10.10 и выше, на CentOS 5.4 и OSX 10.6 +.
На Ubuntu 10.10 я сделал apt-get install openjdk-6-jdk
, а затем, чтобы все работало правильно, мне пришлось
export LD_LIBRARY_PATH=
/usr/lib/jvm/java-6-openjdk/jre/lib/i386:
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/xawt
(переводы строки для удобочитаемости)
Но если у кого-то был другой JDK installed (например, Sun), тогда каталоги, вероятно, будут отличаться (?).