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 인 터 페 이 스 를 정의 하면 끝 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JNA and libffiJNA make it easy to call native code from Java. For a given function defined in JNA way. JNA first gets the handle to th...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.