2010-07-15 4 views
1

그들은 Mono의 PInvoke와 같은 것을 사용합니까? 또는 런타임이 시작되기 전에 등록 된 내부 호출과 더 비슷합니까? java에는 mscorlib.dll과 같은 기본 호출을 처리하기위한 기본 라이브러리가 있습니까? C 코드에서 JVM을 호출하려면 라이브러리에서 .so/.dll 파일을 찾습니다. 모든 JRE 네이티브 라이브러리를 정적으로 링크하는 경우 Java 표준 라이브러리와 차이가 있습니까?Java 표준 라이브러리는 어떻게 원시 코드와 comunicate합니까?

답변

6

그들은 공개적으로 문서화 된대로 JNI를 사용하여 특정 플랫폼에 대한 원시 공유 라이브러리를 호출합니다.

C 코드에서 JVM을 호출하는 한 JVM은 공유 라이브러리 (DLL, SO 등)를 사용합니다. JDK 6 소스 코드를 빠르게 검색해도 핵심 네이티브 지원 (예 : Object, String 등의 네이티브 메소드)에 대한 System.loadLibrary()가 표시되지 않습니다. 이는 JRE/bin 디렉토리의 내용으로 판단 할 때 DLL에있는 것으로 보이는이 메소드의 원시 코드가 java.exe (및 Windows의 javaw.exe)에 의해 명시 적으로 링크되어 있음을 나에게 암시합니다.

마지막으로이 항목을 살펴보면 C 코드에서 JVM을 호출하기위한 요구 사항이 JNI의 잘 문서화 된 부분이었습니다. 더 자세히 진행하려면 해당 문서를 참조하십시오. 우리는 IBM AS/400 Java 1.1 JVM 용 네이티브 C 래퍼/로더를 성공적으로 작성하기까지했습니다.

0

예를 들어 여기에 C 프로그램 내에서 JVM을 시작하는 방법에 대한이 자바 코드 "(그들의 홈페이지에서 인용).

개인적으로 지금까지 시도한 적이 없습니다.

0

는 "Java Native Access (JNA)이 (Windows의 DLL을) Java 프로그램을 제공하는 네이티브 공유 라이브러리에 쉽게 액세스 :

관련 문제