我需要在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'能够正常工作
有人可以解释一下我需要做什么才能编译代码。
谢谢。
修改
@Ahmed Masaud: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 在java.net.URLClassLoader $ 1.run(未知来源) 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'
答案 0 :(得分: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的完整路径。