2013-07-22 4 views
0

JNI 인터페이스를 사용하여 C 코드에서 Java 코드를 호출합니다. 컴파일 중에 다음 명령을 사용합니다 :C에서 Java 코드 호출

gcc -g -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/-I/usr/lib/jvm// usr/bin/java -L/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre// AMD64/서버/-ljvm calljava.c

내가 JVM을 만들려면 다음 코드를 사용 LIB :

JNIEnv* create_vm() 
{ 
    JavaVM* jvm; 
    JNIEnv* env; 
    JavaVMInitArgs args; 
    JavaVMOption options[1]; 
    args.version = JNI_VERSION_1_2; 
    args.nOptions = 1; 
    options[0].optionString = "-Djava.class.path=<classpath>"; 
    args.options = options; 
    args.ignoreUnrecognized = JNI_FALSE; 
    JNI_CreateJavaVM(&jvm, (void **)&env, &args); 
    return env; 
} 

내 질문은 : 바이너리에 하드 코딩 JVM의 경로를? 런타임시 Java 실행 파일에 대한 경로를 지정할 수 있습니까? 그렇게 할 수있는 방법이 있다면 누구든지 컴파일 플래그를 사용할 수 있습니까? 사전에

감사합니다!

답변

1

"java executable"은 전혀 사용되지 않습니다. 코드를 컴파일하고 링크 할 때 런타임에 실행 파일을 시작할 때 런타임에 시스템에 의해 결정되는 위치가 공유 라이브러리에 연결됩니다.

동적으로 jvm 공유 라이브러리를 알려진 위치에서로드하고 (그 다음에 찾아서 함수를 호출하는 경우가 아니라면) 시스템은 "JVM 경로"를 결정합니다.

보통 특정 버전에 대해 실행하려면 해당 버전을 응용 프로그램 배포에 포함시키고 적절한 공유 라이브러리가 사용되도록 응용 프로그램의 시작을 구성합니다 (환경을 적절하게 설정하는 스크립트를 통해 , 동적으로로드하거나 다른 시스템 특정 메소드).