2012-01-19 2 views
2

내 문제 : C++ DLL 용 Java 래퍼 만들기. 아시다시피,이 문제에 대한 많은 기사가 있지만 지금까지 나와 관련된 해결책이 없습니다. 그런 다음 문제가 있습니다 : C : \ java \ jdk에서 29, 32 비트를 Windows 7, 64 비트에 설치했습니다. 이 경로는 path 변수의 일부입니다. (아무 곳에 나 열려 있으면 cmdac ...)SWIG C++ Java DLL Windows

저는 최신 swig를 가지고 있는데, 이는 내 DLL을위한 파이썬과 펄 래퍼를 성공적으로 만들었습니다. 오류없이 완료 - -

은 내가 VS2008와 자바/클래스 샘플 된 벌브 때 나는 오류를 얻을 runme.java 실행하려고 :

UnsatisfiedLinkError를

-> 기본 코드 라이브러리를로드하는 데 실패했습니다. 도움이 필요하면 SWIG Java 설명서의 Dynamic Linking 관련 장을 참조하십시오.

DLL이 매우 간단합니다. 런타임 라이브러리 (/ MT)에 정적으로 링크되었습니다. 의존성은 없지만 여전히 이 오류가 발생합니다.

참고 : swig 샘플은 작동하지 않습니다. Java가 설치되었습니다. 또한 tcl 샘플이 작동하지 않습니다. tcl 8.4가 설치되었습니다 (유사한 오류).

도움을 주시면 감사하겠습니다. 감사합니다.

+0

DLL은 32 비트 또는 64 비트입니까? –

답변

1

클래스가 성공적으로 컴파일되었고 네이티브 라이브러리가 성공적으로 컴파일되었습니다. 문제는 Java 코드가 런타임시 Visual Studio로 생성 한 공유 객체를로드해야한다는 것입니다.

클래스를 실행할 때 -Djava.library.path=<directory containing your DLL>을 전달해 봅니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 나는 자바 초보자이다. 모든 .java, 모든 .class 및 dll은 같은 디렉토리에 있습니다. 명령 줄에서 모두 실행하고 다른 DLL을로드하는 간단한 Java 클래스를 시도했습니다. 그냥 load (loadLibrary (dllname)). 이것은 효과가 있었다. Swig 자신의 샘플이 실패 할 때 어떻게 든 swig와 관련이 있어야합니다. – user947604

+0

@ user947604 : SWIG는 C++ 파일과 Java 파일의 두 가지 코드를 생성합니다. C++ 파일을 DLL로 컴파일합니다. 그런 다음 Java 파일을 .class로 컴파일합니다. 마지막으로 Java 클래스를 실행합니다. 그러나 빌드 한 DLL은 java.library.path에 있어야합니다. – Borealid

+0

java jdk는 c : \ java \ jdk에 설치됩니다. 이 경로의 위치를 ​​찾는 방법을 알려주시겠습니까? – user947604

0

당신이 묘사 한 것에서 보면 (SWIG가 생성 한) JNI 메서드 중 하나를 호출하기 전에 Java에서 컴파일 한 DLL을로드하지 않은 것처럼 보입니다. DLL이 자바 코드에 의해 실행시 자동으로로드되도록 내 꿀꺽 꿀꺽 인터페이스 파일에

%pragma(java) jniclasscode=%{ 
    static { 
    try { 
     System.loadLibrary("module"); 
    } catch (UnsatisfiedLinkError e) { 
     System.err.println("Native code library failed to load. \n" + e); 
     System.exit(1); 
    } 
    } 
%} 

:

나는 일반적으로 같은 것을 사용합니다.

(DLL은 시스템의 라이브러리 경로와 관련하여 적절한 위치에 있어야합니다.)