Я перехожу по этой ссылке: Получение идентификатора потока для потоков 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)
Но если я буду построчно выполнять вещи внутри скрипта, он будет работать.
Я подозреваю, что это переменные окружения пользователя и пользователя, который выполняет скрипт, но я не уверен в этом.Спасибо,Артанис Зератул