#java #c #linux #java-native-interface
#java #c #linux #java-native-interface
Вопрос:
У меня есть Compile.sh
файл.
Это работает как шарм:
cd src
javac model/JNIResultSet.java
javah -jni model.JNIResultSet
cp model_JNIResultSet.h ./../bin/
cd ..
cd bin
gcc -fPIC -o libspieler.so -shared -I/usr/java/jdk1.8.0_73/include/ SharedTable.c -lc
java -Djava.library.path=./../bin/ app.Main
Моя проблема в том, что я не хочу, чтобы мои исходники находились в папке bin.
Я хочу, чтобы они были в отдельной папке.
Для этого мой скрипт выглядит следующим образом:
cd src
javac model/JNIResultSet.java
javah -jni model.JNIResultSet
cp model_JNIResultSet.h ./../data/
cd ..
cd data
gcc -fPIC -o libspieler.so -shared -I/usr/java/jdk1.8.0_73/include/ SharedTable.c -lc
cd ..
cd bin
java -Djava.library.path=./../data/ app.Main
Я не знаю, почему этот не работает. Я не получаю исключений, но программа также работает некорректно. Вы знаете, как это исправить?
Комментарии:
1. Является «libspeiler.so » создан в обоих случаях? Или, что такое ошибка компилятора? Какой код вы используете для загрузки .so?
2. Ошибки нет.. Проект C должен считываться из текстового файла. Если у меня есть исходники в папке bin, это работает, если они у меня есть в отдельной папке, таблица пуста без изменения кода
3. выполните отладчик и посмотрите, что происходит с новой версией.. моим первым предположением было бы, что относительный путь к файлу теперь каким-то образом поврежден.
4. использовать
make
вместо скрипта?
Ответ №1:
Рабочий скрипт имеет:
cd bin
gcc -fPIC -o libspieler.so -shared -I/usr/java/jdk1.8.0_73/include/ SharedTable.c
А другая версия имеет:
cd data
gcc -fPIC -o libspieler.so -shared -I/usr/java/jdk1.8.0_73/include/ SharedTable.c -lc
Так SharedTable.c
должно быть в bin
каталоге, и gcc
команда не может его найти, потому что его больше нет в текущем каталоге. Попробуйте
вместо этого используется относительный путь:
gcc -fPIC -o libspieler.so -shared -I/usr/java/jdk1.8.0_73/include/ ../bin/SharedTable.c -lc