Добавьте в текст вопроса конкретики побольше. Вопрос, на самом деле, довольно сложный. Ну то есть, вопрос, как по-нормальному динамически загружать либу на всех платформах. Ибо при сборке JNI_CreateJavaVM не слинковать (ну, т.е. слинковать то можно, но тогда jvm.so как символ в таблицу импорта попадет и будет искаться в PATH при запуске. а ее там нету). Надо находить jvm.so, подключать через dlopen, и оттуда уже JNI_CreateJavaVM вызывать. Если это то, что вам нужно, могу подробнее написать. Хотя у меня самого там говнокод знатный=) За нормальным кодом нужно в исходники OpenJDK лезть. Исходники лаунчера лежат в /jdk/src/share/bin и /jdk/src/linux/bin. Кода там не то чтоб прям слишком много...
vlad20012: Ну смотри, задача запустить джарник через JNI, хидеры есть а либы нету (статической/динамической). Нужно подключить же к проекту, а где либы искать ума не приложу.
Да-да, либу к проекту подключить не нужно, ее нужно линковать в рантайме. Если прям совсем сократить код (убрать всю кроссплатформенность, выбор правильной JVM из нескольких и обработку ошибок), то вы должны написать что-то типа этого:
#define JVM_DLL "libjvm.so"
#define JAVA_DLL "libjava.so"
typedef jint (JNICALL CreateJavaVM_t)(JavaVM **pvm, void **env, void *args);
char libjava[PATH_MAX];
char jrepath[PATH_MAX];
Да и вообще судя по коду, он не Qt-шный. В принципе с кроссплатформенностью думаю можно и не разбираться. А вообще можно ли вынести библиотеки локально в программу? Бывает что JAVA_HOME или другая переменная в системе не определена, а люди которые с этим никогда не имели дел просто не знаю как ее настроить и возникает гора ненужного мнения :D Есть ли возможность библиотеки вынести в программу?
Читайте код внимательнее, JAVA_HOME там не обязательна.
Чтоб написать кроссплатформенно, читайте исходники лаунчера из OpenJDK.
Библиотеки включить в программу, вероятно, можно, но это мазохизм какой-то будет. Ибо там нужна не одна какая-то библиотека, а весь JRE, который весит мегабайт так 150