2011-01-17 3 views
2

GJC를 사용하면 안되는 이유는 무엇인지 모르겠다. 나는 그 죄책감을 이해하고있다.GJC - 외부 항아리

질문 : 정규 병을 사용하는 것처럼 컴파일 된 라이브러리를 링크 할 수 있습니까?

gcj -shared -fPIC -Wl,-Bsymbolic jarfiles.jar -o jarfiles.so 

그리고는 .so를 파일을 호출하는 실행하려고 :

// this works and links to the jarfiles.jar 
java -cp lib/jarfiles.jar:classes Main 

하지만 내가이 같은 네이티브 코드로 항아리를 켜 그것은 할 수없는 불면

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 디렉토리 또는 유사한 (BTW : 디렉토리를 LD_LIBRARY_PATH에 나열되어 있어야합니다)

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

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