2012-08-12 3 views
0

저는 CardScan SDK의 Java 샘플 데이터베이스 프로그램을 사용하려고합니다.JNI UnsatisfiedLinkError- 라이브러리를 올바르게로드하려면 어떻게해야합니까?

Java/JNI 및 Java/Database에있는 파일로 작업하고 있습니다. 프로그램은 32 비트 JRE로 실행해야합니다. Java를 제거하고 32 비트 버전을 설치 한 다음 Java 용 시스템 경로를 다시 추가하여 64 비트 시스템에서이를 수행 할 수있었습니다. SDKData.bat 파일을 두 번 클릭하면 성공적으로 CardScan 데이터베이스 파일 (.cdb)로 프로그램과 인터페이스를 실행할 수 있지만 Java.library.path를 편집 및 편집 할 소스 파일을 열면 필요한 라이브러리 (CRTK_JNI .DLL), 나는 사방 UnsatisfiedLinkErrors를 얻을 : 라이브러리가 제대로로드되지 않기 때문에

Exception in thread "main" java.lang.UnsatisfiedLinkError: sdkdata.CRTK.CRTK_Init([I)I
at sdkdata.CRTK.CRTK_Init(Native Method)
at sdkdata.CRTK.(CRTK.java:239)
at sdkdata.SDKData.(SDKData.java:97)
at sdkdata.SDKData.main(SDKData.java:643)
Java Result: 1

은 아마도이 일어나고있다.

CRTK_JNI의 모든 원시 기능을 정상적으로 실행하고 전체 용량으로 프로그램을 실행하고 편집하려면 무엇을해야합니까?

+0

그래서 라이브러리에는 언 바운드 심볼이 있습니까? –

+0

@DonalFellows 여기에 언 바운드라고 생각되는 모든 것이 있습니다 : http://pastebin.com/5vsxty5e – blastb

+1

당신은 java.library.path에 DLL을 넣지 않습니다. DLL이 들어있는 디렉토리를 넣습니다. – bmargulies

답변

0

분명히하기 위해이 Java 샘플 프로그램은 CardScan API에서 공식적으로 지원되지 않습니다. 실험적 구현에만 의존하는 지원되지 않는 언어로 API를 사용하는 것은 좋지 않습니다. SDK로 작업 할 때 지원되는 언어 (Visual Basic) 중 하나를 사용하여 종료했습니다. 이 질문을 보는 사람이 CardScan API 사용에 어려움을 겪는다면 here이 Github의 VB 구현입니다.

2

Presumably this is happening because the library is not loading properly.

반대로. 라이브러리로드가 완료되었습니다. 당신은 System.load()/loadLibrary() 호출에서, 네이티브 메소드를 호출 할 때, 서명이 있어야 하나의 오류를 받고 있는지 점점되지 않습니다

package sdkdata; 

public class CRTK 
{ 
    public native int CRTK_Init(int[]); 
} 

를 그래서이없는, 또는 당신이 서명을 변경 .h 및 .c 파일을 다시 생성하지 않고 수동으로 선언을 수동으로 맹 글링했습니다.

코드를 게시하십시오.

+0

나는 내 코드를 게시했지만, 어떤 이유로 든 중재자가 편집했다. 질문 규칙에 더 많은 관심을 기울여야 할 것입니다. 미안합니다. – blastb

관련 문제