2016-10-19 3 views
2

У меня есть файл Compile.sh.
Это один работает как шарм:Компиляция проекта в терминале Linux не работает

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 

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

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 

Я не знаю, почему это один не работает. Я не получаю исключения, но программа также работает неправильно. Вы знаете, как это исправить?

+0

Есть ли libspeiler.so в обоих случаях? Или, что такое ошибка компилятора? Какой код вы используете для загрузки .so? – Jamie

+0

Ошибка отсутствует. Проект C следует читать из txt-файла. Если у меня есть источники в папке bin, это работает, если у меня есть их в отдельной папке, таблица пуста, не меняя код – mafioso

+0

, пройдите через отладчик и посмотрите, что будет с ошибкой с новой версией. Мое первое предположение было бы относительный путь к файлу теперь перегружен каким-то образом. – yano

ответ

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