Компиляция собственного интерфейса Java и сценарий оболочки - PullRequest
0 голосов
/ 03 декабря 2018

Я перехожу по этой ссылке: Получение идентификатора потока для потоков Java в Linux

И ответ от betabandido в сочетании с моими обновлениями работает, за исключением того, что он не использует скрипт.Поэтому я попытался поместить команды для сборки в один сценарий оболочки:

#!/bin/sh


CURRENT_JAVA_HOME=`echo $JAVA_HOME`

echo "The current java home is --> $CURRENT_JAVA_HOME"

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:bin/javac::")

echo "The new java home is     --> $JAVA_HOME"

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
javac GetThreadID.java
javah GetThreadID

gcc -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -fPIC -shared GetThread.c -o libGetThreadID.so
javac Main.java

# setting back the original JAVA_HOME
JAVA_HOME=$CURRENT_JAVA_HOME

при запуске:

$ java Main

Я получаю следующую ошибку:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no GetThreadID in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at GetThreadID.<clinit>(GetThreadID.java:5)
    at Main.main(Main.java:36)

Но если я буду построчно выполнять вещи внутри скрипта, он будет работать.

Я подозреваю, что это переменные окружения пользователя и пользователя, который выполняет скрипт, но я не уверен в этом.Спасибо,Артанис Зератул

...