无法执行二进制文件 - 可执行Jar文件

时间:2015-01-17 15:00:52

标签: java terminal makefile executable

我在尝试使用makefile运行可执行jar文件时遇到问题。任何帮助表示赞赏。

$ ./HelloWorld
-bash: ./HelloWorld: cannot execute binary file

$ file HelloWorld
HelloWorld: Zip archive data, at least v2.0 to extract

$ ls -l
total 32
-rwxr-xr-x  1 myMac  staff  773 Jan 17 06:55 HelloWorld
-rw-r--r--  1 myMac  staff  427 Jan 17 06:55 HelloWorld.class
-rw-r--r--  1 myMac  staff  120 Jan 17 05:52 HelloWorld.java
-rw-r--r--  1 myMac  staff  304 Jan 17 05:59 makefile

这些是我正在使用的2个文件。

HelloWorld.java

class HelloWorld{
 public static void main(String[] args){
 System.out.println("Hello, world!");
 }
}

生成文件

HelloWorld: HelloWorld.class
    echo Main-class: HelloWorld > Manifest
    jar cvfm HelloWorld Manifest HelloWorld.class
    rm Manifest
    chmod +x HelloWorld
HelloWorld.class: HelloWorld.java
    javac -Xlint HelloWorld.java

1 个答案:

答案 0 :(得分:1)

此命令:

jar cvfm HelloWorld Manifest HelloWorld.class

创建一个jar文件(file HelloWorld,如./HelloWorld告诉您的)。这不是可以像java -jar HellorWorld 一样运行的“普通”二进制文件。您需要使用Java为您运行它:

jar cvfm HelloWorld.jar Manifest HelloWorld.class

我还建议将上面的代码更改为:

HelloWorld

所以很清楚那个文件到底是什么。

顺便说一句,由于chmod +x HelloWorld不是二进制文件,因此您不需要命令{{1}}。