어떻게 자바 에서 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 아래
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux 에서 텍스트 처리 삼 총사정규 표현 식 (정규 표현 식,): grep 텍스트 필터 grep 문법 sed 흐름 편집기 sed 문법 awk: 보고서 생 성기, 포맷 후 표시 다른 텍스트 보기 도구 vim 편집기...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.