jna 의 사용

3752 단어 JNA
자바 호출 공유 메모리 문제 가 발생 했 습 니 다.
자바 공유 메모리 호출 api 를 찾 지 못 한 것 같 습 니 다.
메모리 호출 이 라면 보 세 요.http://haoningabc.iteye.com/blog/1329079
자바 호출 c 는 웹 서비스 나 jni 방식 으로 만 가능 합 니 다.
네트워크 전송 에 성능 을 소모 하지 않 기 위해 웹 서 비 스 를 먼저 꺼 지게 합 니 다.
jna 를 사용 하 세 요. c 공유 메모리 호출 은 말 하지 않 겠 습 니 다. 는 상세 합 니 다.
jni 는 사용 하기 가 쉽 지 않 습 니까? 아니면 jna 가 간단 합 니까?
하면, 만약, 만약...
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class HelloWorld {
	public interface CLibrary extends Library {
		CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
		void printf(String format, Object... args);
	}
	public static void main(String[] args) {
		CLibrary.INSTANCE.printf("in windows
"); for (int i = 0; i < args.length; i++) { CLibrary.INSTANCE.printf("Argument %d: %s
", i, args[i]); } } }

하면, 만약, 만약...
c 복습 도 하고 testadd 의 동적 라 이브 러 리 를 만 들 려 고 합 니 다. 먼저 동적 라 이브 러 리 가 잘 되 는 지 확인 하 세 요.
먼저 3 개의 파일 test. h test. c testad. c 를 작성 합 니 다.
test.h
#include <stdio.h>
void add();

test.c
#include <stdio.h>
#include "test.h"
int main()
{
        printf("haha
"); add(); }

testadd.c

#include <stdio.h>
#include <unistd.h>
void add()
{
        char name[65];
        printf("this is add 
"); gethostname(name, sizeof(name)); printf("hostname=%s
",name); system("ls"); }

libtestad. so 생 성
잘 되 는 지 시험 해 보 세 요.
[root@redhat5 c]# gcc -fpic -shared -o libtestadd.so testadd.c
[root@redhat5 c]# gcc -o test test.c -I. -L. -ltestadd
[root@redhat5 c]# ./test 
(         ,  fedora16,   ./test: error while loading shared libraries: libtestadd.so: cannot open shared object file: No such file or directory,       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:            )
haha
this is add 
hostname=122226
a.out     libtestadd.so  TestAddService.class          test.h
biji.txt  main.c         TestAddService.java           y.tab.c
JNA.chm   test           TestAddService$TestAdd.class
jna.jar   testadd.c      test.c
[root@redhat5 c]# 

yeh, "this is add" 는 libtestad. so 가 인쇄 한 것 입 니 다.
현재 jna 로 libtestad. so 호출
jna. jar 를 이 디 렉 터 리 아래 에 놓 으 세 요.
TestAddService. java 작성
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestAddService {
	public TestAddService() {
	}
	public interface TestAdd extends Library {
		TestAdd INSTANCE = (TestAdd) Native.loadLibrary("testadd",TestAdd.class);
		public void add();
	}
	public static void main(String[] args) {
		TestAdd.INSTANCE.add();
		System.out.println("  yeh yeh jna in linux");
	}
}
[root@redhat5 c]# javac -cp .:jna.jar TestAddService.java 
[root@redhat5 c]# java -cp .:jna.jar TestAddService       
this is add 
hostname=122226
a.out     libtestadd.so  TestAddService.class          test.h
biji.txt  main.c         TestAddService.java           y.tab.c
JNA.chm   test           TestAddService$TestAdd.class
jna.jar   testadd.c      test.c
  yeh yeh jna in linux

끝 났 습 니 다. 자바 가 c 인 터 페 이 스 를 정의 하면 끝 입 니 다.

좋은 웹페이지 즐겨찾기