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

标签 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 个文件。

Hello World .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

最佳答案

这个命令:

jar cvfm HelloWorld Manifest HelloWorld.class

创建一个 jar 文件(jar files are ZIP archives 就像 file HelloWorld 告诉你的那样)。这不是一个可以像 ./HelloWorld 一样运行的“普通”二进制文件。您需要使用 Java 来为您运行它:

java -jar HellorWorld

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

jar cvfm HelloWorld.jar Manifest HelloWorld.class

这样就很清楚那个文件到底是什么了。

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

关于java - 无法执行二进制文件 - 可执行 Jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000720/

相关文章:

java - 如何动态读取xml节点值?

java - 建议的通知振动持续时间?

java - 如何设置正确的Bean类路径

mongodb - 在 Mac 上尝试 mkdir/data/db 时出现只读文件系统

java - 构建文件中“找不到主类错误”

linux - 如何从脚本/手动或通过管道调用编辑和执行命令

jboss - 您可以在 JBoss Fuse 的 Karaf 终端中运行脚本文件吗?

linux - 使用占位符更新文件内容

makefile - 模式规则中的通配符

c++ - 无法使用单独的文件夹获取生成文件以使头文件正常工作