.java 파일을 C++ 프로그램에서 컴파일 할 수 있습니까? (.java 파일이 나에게 주어 졌다고 가정)? 그렇다면 어떻게?C++을 사용하여 .java 파일을 컴파일하는 방법
답변
C++을 사용하여 Java 모듈을 컴파일 할 수 있습니다. UNIX/Linux의 경우 C++에서 fork()
/exec()
C 함수를 사용하여 javac
컴파일러를 별도의 프로세스 내에서 실행할 수 있습니다. Windows에서는 CREATEPROCESS 기능을 사용할 수 있습니다.
다른 기술은 쉘을 시작하여 javac
을 호출하는 것을 포함합니다. 이것은 입력과 출력을 "시작"프로그램과 통합하기 위해 더 많은 작업을하고 싶지 않을 때 사용됩니다.
C/C++ 프로세스에서 기존 JNI (Java Native Interface)를 사용하여 JVM을 시작할 수도 있습니다. 그런 솔루션에서 새로운 Java 1.6 기능을 사용하여 툴 체인 컴파일러를 사용할 수 있습니다. 컴파일러가 있으면 JNI 호출을 통해 호출하여 소스 코드를 컴파일 할 수 있습니다.
javac
프로그램은 오픈 소스입니다. 적절한 조건에서 (GPL과 호환되는 것을 개발중인 경우) 프로그램 내에서 HotSpot 코드를 직접 통합 할 수 있습니다.
마지막으로 Java의 작은 하위 집합을 컴파일하는 경우에는 자체 컴파일러를 작성할 수도 있습니다. JVM 바이트 코드는 이해하기 쉽고 클래스 파일 형식은 공개적으로 액세스 할 수 있습니다.
당신이 포함하고 C++ 프로그램에서 컴파일 된 자바 클래스를 실행하는 데 의미 가정 :
당신은 대부분 반전 문제를 해결하는 데 사용되는 JNI를 사용할 수 있습니다 (자바에서 네이티브 코드를 실행).
JNI 환경을 만드는 방법과 Java 코드에서 메소드를 호출하는 방법을 자세히 설명한 http://java.sun.com/docs/books/jni/html/invoke.html을 살펴보십시오.
+1 JVM의 JNI 킥 스타트에 대해,하지만 컴파일러를 잡는 기능이 최근에 소개 된 것을 잊지 마십시오. –
OP가 C++의 java 소스 코드를 실제로 컴파일하려고하는지 확신하지 못합니다. "java를 C++로 컴파일하려고합니다."즉 클래스 파일에서 java 바이트 코드를 실행하고 싶다고 생각했습니다. – mvds
OP가 실제로 Java를 C++로 컴파일하려고하는지 확신 할 수 없습니다. C++에서 Java를 컴파일하는 방법을 알려줍니다. –
당신은 응용 프로그램 내에서 JVM을 내장하고 JavaCompiler
의 메소드를 얻을 전화 (안된) JNI의 조금을 작성하여이 작업을 수행 할 수 있습니다 :
jclass provider = env->FindClass("javax/tools/ToolProvider");
jmethodID providermid = env->GetStaticMethodID(provider, "getSystemJavaCompiler", "()Ljavax/tools/JavaCompiler");
jobject compiler = env->CallStaticVoidMethod(provider, providermid);
jclass cls = env->GetObjectClass(compiler);
jmethodID compilermid = env->GetMethodID(cls, "run", "(Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;[Ljava/lang/String;)I");
jstring filename = env->NewStringUTF(env, "my_file.java");
env->CallIntMethod(compiler, compilermid, NULL, NULL, NULL, filename);
컴파일러는 ToolProvider
에서 고개를했다. JNI를 통해 C++로
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, "my_file.java");
:
그래서 기본적으로 이전의 C++ 코드를 직접 번역 한 것입니다.
include 파일에서 보통'JavaCompiler'와 같은 클래스를 찾으십니까? – hirschhornsalz
@drhirsch 내가 알고있는 모든 포함 파일에서'JavaCompiler' 클래스를 찾을 수 없습니다. 이 예제는'#include
- 1. Java 소스 파일을 컴파일하는 방법
- 2. rt.jar에서 Java .class 파일을 디 컴파일하는 방법
- 3. .class 파일을 디 컴파일하는 방법?
- 4. .nib 파일을 컴파일하는 방법
- 5. maven을 사용하여 atl 파일을 컴파일하는 방법
- 6. cmake를 사용하여 .fx 파일을 컴파일하는 방법
- 7. make에서 여러 파일을 컴파일하는 방법
- 8. 많은 json 파일을 컴파일하는 방법
- 9. C을 찾는 ++ 구현()`
- 10. .a 파일을 사용하여 c 파일을 컴파일하는 명령
- 11. GCC로 java 파일을 컴파일하는 중 오류가 발생했습니다
- 12. MXMLC가 컴파일하는 파일을 결정하는 방법
- 13. FMX 파일을 디 컴파일하는 방법
- 14. Eclipse를 사용하여 PMD를 컴파일하는 방법
- 15. Arduino를 사용하여 스케치를 컴파일하는 방법
- 16. OpenJDK를 사용하여 Fedora 17에서 Java 6으로 컴파일하는 방법
- 17. CodeRunner를 사용하여 SecureUDID를 컴파일하는 방법
- 18. VS 2010으로 .resx .txt 파일을 컴파일하는 방법
- 19. 우분투에서 cairo 파일을 실행하고 컴파일하는 방법
- 20. 다중 이름 공간을 사용하여 SWC 파일을 컴파일하는 방법
- 21. 리눅스에서 GCC를 사용하여 간단한 소스 파일을 컴파일하는 방법
- 22. JOGL을 사용하여 파일을 컴파일하는 중 문제가 발생했습니다.
- 23. vs2008을 사용하여 어셈블리 파일을 컴파일하는 방법은 무엇입니까?
- 24. MinGW를 사용하여 메이크 파일을 컴파일하는 방법은 무엇입니까?
- 25. minecraft와 별도로 명령 프롬프트를 사용하여 minecraft 용 Java 파일을 컴파일하는 방법
- 26. .jrxml 파일을 .jrxml 파일로 디 컴파일하는 방법
- 27. Windows 7에서 cygwin으로 C++ 파일을 컴파일하는 방법
- 28. .Fla 및 .as 파일을 컴파일하는 방법
- 29. Eclipse에서 포함 파일을 다시 컴파일하는 방법
- 30. 파일을 컴파일하는 C++
명령 줄을 실행 하시겠습니까? javac –
또는 Java 언어 용 C++로 컴파일러를 작성할 수 있음) – hage
왜이 작업을 수행하려고합니까? – Tom