Компиляция проекта в терминале Linux не работает

#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