GJC - внешний сосуд
Пожалуйста, не впадайте в суету, почему я не должен использовать GJC, я понимаю доводы "против" этого.
Вопрос в том, могу ли я скомпилировать библиотеку так же, как если бы я использовал обычный jar?
// this works and links to the jarfiles.jar
java -cp lib/jarfiles.jar:classes Main
Но я превращаю флягу в родной код как это:
gcj -shared -fPIC -Wl,-Bsymbolic jarfiles.jar -o jarfiles.so
И попробуйте запустить его с помощью файла.so:
java -cp lib/jarfiles.so:classes Main
Удар не в состоянии найти ожидаемые классы.
Exception in thread "main" java.lang.NoClassDefFoundError: com/netxpect/FirstFromJar
at Main.<clinit>(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.netxpect.FirstFromJar
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
Разве это не должно работать? Что я делаю неправильно? Спасибо.
1 ответ
Решение
Я думаю, что это должно быть:
1- gcj -shared -fjni jarfiles.jar -o libjarfiles-shared.so
2 - поместите jarfiles.so в /usr/lib или аналогичный (btw: каталог должен быть указан в LD_LIBRARY_PATH)
3- gcj -fjni Somefile.java --main=Somefile -ljarfiles-shared
4- LD_LIBRARY_PATH=/usr/lib/jni ./a.out