简体   繁体   English

如何编译这个Java应用程序

[英]how to compile this java application

I need to compile the Java app from this code on Windows: 我需要从Windows上的以下代码编译Java应用程序:

http://www.falstad.com/vector3dm/base.java http://www.falstad.com/vector3dm/base.java

The comments at the to mention that 的评论中提到

// this file must be run through cpp with one of BUILD_E, BUILD_V,
// BUILD_M defined before compiling with java compiler.  This was done
// to reduce class file sizes.

I don't know what it means. 我不知道这是什么意思 Does cpp stands for C++ compiler? cpp代表C ++编译器吗? How do I run it on this java code? 如何在此Java代码上运行它? I see some #define statments in the code. 我在代码中看到了一些#define语句。 Being a Java code I would expected 'javac base.java' to just work 作为Java代码,我希望'javac base.java'可以正常工作

Can someone please explain what I need to do in order to compile the code. 有人可以解释一下我需要做些什么来编译代码。

Thank you. 谢谢。

EDIT: 编辑:

@Ahmed Masaud: @艾哈迈德·马索德(Ahmed Masaud):
I downloaded anarres-cpp-bin-1.2.6.tar.gz from the annarres website and extracted in my JDK directory. 我从annarres网站下载了anarres-cpp-bin-1.2.6.tar.gz,并将其解压缩到我的JDK目录中。 Here is what I have now: 这是我现在所拥有的:

C:\\Program Files\\Java\\jre6\\bin\\base.java C:\\ Program Files \\ Java \\ jre6 \\ bin \\ base.java

C:\\Program Files\\Java\\jre6\\lib\\anarres-cpp.jar C:\\ Program Files \\ Java \\ jre6 \\ lib \\ anarres-cpp.jar

C:\\Program Files\\Java\\jre6\\lib\\gnu.getopt.jar C:\\ Program Files \\ Java \\ jre6 \\ lib \\ gnu.getopt.jar

When running the command you indicated 运行您指示的命令时

java -Xmx128M -cp lib/anarres-cpp.jar:lib/gnu.getopt.jar org.anarres.cpp.Main -o base-e.java -DBUILD_E base.java java -Xmx128M -cp lib / anarres-cpp.jar:lib / gnu.getopt.jar org.anarres.cpp.Main -o base-e.java -DBUILD_E base.java

and here is what I get: 这是我得到的:

Exception in thread "main" java.lang.NoClassDefFoundError: org/anarres/cpp/Main Caused by: java.lang.ClassNotFoundException: org.anarres.cpp.Main at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: org.anarres.cpp.Main. 线程“主”中的异常java.lang.NoClassDefFoundError:org / anarres / cpp / Main原因:java.lang.ClassNotFoundException:org.anarres.cpp.Main at java.net.URLClassLoader $ 1.run(java上的未知源) java.net.URLClassLoader.findClass(未知源)处的.security.AccessController.doPrivileged(本地方法)java.lang.ClassLoader.loadClass(未知源)处的sun.misc.Launcher $ AppClassLoader.loadClass(java处) .lang.ClassLoader.loadClass(未知源)找不到主类:org.anarres.cpp.Main。 Program will exit. 程序将会退出。

it looks like it can't find 'org.anarres.cpp.Main' 看起来找不到'org.anarres.cpp.Main'

CPP means C-preprocessor not C++. CPP意味着C预处理器不是C ++。 What they are asking you to do is to run it with a particular define: 他们要您执行的操作是使用特定的定义来运行它:

If you are using linux you can do this by typing 如果您使用的是Linux,则可以通过键入

  cpp -o base-e.java -DBUILD_E base.java

this will create a base-e.java file which uses the BUILD_E options in base.java 这将创建一个使用base.java中的BUILD_E选项的base-e.java文件。

If you are using windows grab mcpp: 如果您使用的是Windows抢mcpp:

http://mcpp.sourceforge.net/download.html http://mcpp.sourceforge.net/download.html

and use mcpp to do the same thing. 并使用mcpp做同样的事情。

There is an alternate jcpp which is a C pre-processor written in java: 还有一个备用的jcpp,它是用Java编写的C预处理程序:

http://www.anarres.org/projects/jcpp/ http://www.anarres.org/projects/jcpp/

may be better choice. 可能是更好的选择。

jcpp is pretty close to the GNU cpp; jcpp非常接近GNU cpp; as it's based on it, so the command-line above should work, and a pre-compiled version is available on that site so: 因为它基于它,所以上面的命令行应该可以使用,并且该站点上提供了预编译的版本,因此:

java -Xmx128M -cp lib/anarres-cpp.jar:lib/gnu.getopt.jar org.anarres.cpp.Main -o base-e.java -DBUILD_E base.java java -Xmx128M -cp lib / anarres-cpp.jar:lib / gnu.getopt.jar org.anarres.cpp.Main -o base-e.java -DBUILD_E base.java

Proper command-line: 正确的命令行:

java -Xmx128M -cp ./lib/anarres-cpp.jar:./lib/gnu.getopt.jar: org.anarres.cpp.Main -DBUILD_E base.java > base-e.java

There is no -o flag support in jcpp jcpp中没有-o标志支持

make sure you put base.java in the anarres-cpp-bin-1.2.6 folder and then run the above command from in there. 确保将base.java放在anarres-cpp-bin-1.2.6文件夹中,然后从那里运行上述命令。

you can then move the base-e.java wherever you like. 然后,您可以将base-e.java移至所需位置。

alternatively you can provide full paths to base.java and base-e.java on command line etc. 或者,您可以在命令行等上提供base.java和base-e.java的完整路径。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM