命令行中的编译问题

时间:2013-10-29 20:28:21

标签: java linux command-line

我正在尝试从linux命令行运行一切,我也是相对较新的。

我正在尝试编译一个使用一些外部库的类,当我执行javac classname.java时,我会收到警告....

It is recommended that the compiler be upgraded.
warning: /opt/pi4j/lib/pi4j-core.jar(com/pi4j/io/gpio/GpioPinOutput.class): major version 51 is newer than 50, the highest major version supported by this compiler.

即使它只是一个警告 - 我试图在类文件上运行java,这导致

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/pi4j/io/gpio/GpioFactory : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at ControlGpioExample.main(ControlGpioExample.java:9)

我搜索了stackoverflow并发现了一个建议使用交叉编译的帖子 - 我已经尝试过了

javac -target 1.6 ControlGpioExample.java 

我如何知道要使用哪个目标?我是否只是继续经历它们直到它起作用?!

由于

4 个答案:

答案 0 :(得分:2)

这不是您正在编译的代码,而是问题 - 这是您正在编译的代码,在pi4j-core.jar中,似乎是用Java 7构建。

我强烈建议你升级JDK,基本上。要么是,要么:

  • 查找使用Java 6
  • 构建的pi4j版本
  • 自己重建

答案 1 :(得分:0)

您正在使用Java 6(版本50)来编译使用已使用Java 7(版本51)编译的库的代码。要么升级你的编译器,要么找到用Java 6编译的pi4j版本,你应该好好去。升级到JDK7将是最佳选择。

作为参考,以下是版本号及其对应的内容:

  • J2SE 7 = 51
  • J2SE 6.0 = 50
  • J2SE 5.0 = 49
  • JDK 1.4 = 48
  • JDK 1.3 = 47
  • JDK 1.2 = 46
  • JDK 1.1 = 45

答案 2 :(得分:0)

请查看pi4j(pi4j-native)构建要求。我从here

取了它们
  • gcc 4.6.3或更新版(sudo apt-get install gcc)
  • git-core(sudo apt-get install git-core)
  • 正在运行的JDK(OpenJDK或Oracle JDK)(sudo apt-get install openjdk-7-jdk)
  • 有效定义的JAVA_HOME环境变量
  • wiringPi源码和平台编译二进制(...)

因此,正如其他答案已经提出的那样,最好升级到JDK 7.

基本上,pi4j可能会使用JDK7中现有的基于JDK6的编译器无法处理的一些功能。

答案 3 :(得分:0)

当您使用更高版本的JDK编译Java代码并尝试使用较低版本的JDK运行时,会发生此问题。你知道你使用的是哪个版本的Java吗?