1

我需要在 Windows 上从这段代码编译 Java 应用程序:

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

提到的评论

// 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.

我不知道这意味着什么。cpp 代表 C++ 编译器吗?如何在这个 java 代码上运行它?我在代码中看到了一些#define 语句。作为 Java 代码,我希望“javac base.java”能够正常工作

有人可以解释一下我需要做什么才能编译代码。

谢谢你。

编辑:

@艾哈迈德·马索德:
我从 annarres 网站下载 anarres-cpp-bin-1.2.6.tar.gz 并提取到我的 JDK 目录中。这是我现在拥有的:

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

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

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

运行您指示的命令时

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

这就是我得到的:

线程“main”中的异常 java.lang.NoClassDefFoundError: org/anarres/cpp/Main 原因: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) 找不到主类:org.anarres.cpp.Main。程序将会退出。

看起来它找不到'org.anarres.cpp.Main'

4

1 回答 1

1

CPP 表示 C 预处理器而不是 C++。他们要求您做的是使用特定定义运行它:

如果您使用的是 linux,您可以通过键入

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

这将创建一个 base-e.java 文件,该文件使用 base.java 中的 BUILD_E 选项

如果您使用的是 windows 抓取 mcpp:

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

并使用 mcpp 做同样的事情。

还有一个替代的 jcpp,它是一个用 java 编写的 C 预处理器:

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

可能是更好的选择。

jcpp 非常接近 GNU cpp;因为它基于它,所以上面的命令行应该可以工作,并且该站点上提供了预编译版本,因此:

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 -DBUILD_E base.java > base-e.java

jcpp 中没有 -o 标志支持

确保将 base.java 放在 anarres-cpp-bin-1.2.6 文件夹中,然后从那里运行上述命令。

然后,您可以将 base-e.java 移动到任何您喜欢的位置。

或者,您可以在命令行等上提供 base.java 和 base-e.java 的完整路径。

于 2013-06-08T16:15:42.823 回答