GJC - внешний сосуд - PullRequest
       27

GJC - внешний сосуд

2 голосов
/ 17 января 2011

Пожалуйста, не спорьте, почему я не должен использовать 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 голос
/ 17 января 2011

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

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

...