2011-01-17 1 views
2

Пожалуйста, не говорите, что я не должен использовать GJC, я понимаю, что это не так.GJC - внешняя баня

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

// 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) 

Не должно ли это работать? Что я делаю не так? Спасибо.

+0

Я был бы очень удивлен/поражен, если это работает. Общие библиотеки обычно добавляются в java.library.path или LD_LIBRARY_PATH, но я не знаю, как вы их используете с gjc. –

ответ

1

Я думаю, что это должно быть:

1- gcj -shared -fjni jarfiles.jar -o libjarfiles-shared.so

2- положить jarfiles.so в/USR/Lib или аналогичный (кстати: каталог должен быть указан в LD_LIBRARY_PATH)

3- gcj -fjni Somefile.java --main=Somefile -ljarfiles-shared

4- LD_LIBRARY_PATH=/usr/lib/jni ./a.out