어떻게 자바 에서 C 의 함 수 를 호출 합 니까?

1747 단어 기술 류
  ,                  ,    java   c   ,        ,         ,      ,      :

자바 클래스 
package com.lzg;
public class Test {
    static {
        System.loadLibrary("swdes");
    }

    public native static String GenCvv(String psCardNo, String psExpiry, String psServiceCode);

    /**
     * 
     * @param args
     * @author lzg
     * @time 2013-3-29   3:57:26
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        GenCvv("123", "1312", "1234");
    }

}

그리고 class 로 컴 파일 해 야 합 니 다.
javac Test. java 를. h 파일 로 컴 파일 합 니 다.
javah - classpath 프로젝트 의 class 경로 com. lzg. Test
그리고. h 파일 을 얻 을 수 있 습 니 다. c 의 친구 에 게. h 파일 을 건 네 주 고 개발 한 다음 에. so 또는. dll 파일 을 생 성하 여 자바 에 넣 어 호출 해 야 합 니 다.
c 의 동료 가. so 파일 을 저 에 게 준 후에 저 는 Liux 환경 에서 테스트 를 했 습 니 다. 두 가지 문제 가 현재 모두 해결 되 었 고 정상적으로 호출 할 수 있 습 니 다. 여러분 께 공유 해 드 리 겠 습 니 다.
가방 이름 이 있 으 면 실행 할 때 주의 하 셔 야 합 니 다.
1. 컴 파일 된 class 를 가방 에 넣 어야 합 니 다. 예 를 들 어 제 가 실행 할 때 Test. class 를 come 폴 더 아래 lzg 에 넣 고 come 의 가방 밖에서 자바 com. lzg. Test 명령 을 실행 해 야 합 니 다.
2. so 파일 을 불 러 올 때, 나의 c 동료 가 나 에 게 준. so 파일 이름 은 libswdes. so 입 니 다. 나 는 자바 류 에서 호출 할 때 System. loadLibrary ("swdes") 를 이렇게 써 야 합 니 다.앞 에 lib 와 접미사 이름 을 가 져 갈 수 없습니다. so
3. Liux 의 jdk 설치 디 렉 터 리 에. so 를 넣 어야 합 니 다 $JAVAHOME / jre / lib / i386 아래.
4. 제 가 호출 할 때 jni wrong ELF class: ELFCLASS 64 오 류 를 만 났 습 니 다. 하지만 동료 가 컴 파일 했 기 때문에 64 비트 를 사 용 했 습 니 다. 제 jdk 는 32 비트 입 니 다. 해결 방법 은 컴 파일 할 때 자릿수 - m32 를 지정 하 는 것 입 니 다.http://blog.chinaunix.net/uid-21335514-id-3286281.html)
추가: windows 환경 에서. dll 파일 을 올 려 야 합 니 다.  $JAVAHOME \ jre \ bin 아래

좋은 웹페이지 즐겨찾기