2015-01-17 4 views
1

У меня возникли проблемы с попыткой запустить исполняемый файл jar с помощью make-файла. Любая помощь оценивается.не может выполнить двоичный файл - исполняемый файл 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!"); 
} 
} 

Makefile

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 
+0

Это все описано в [материале класса Princeton] (http://www.cs.princeton.edu/courses/archive/spr04/cos126/hello/mac.htm), который также включает в себя ответ. –

+0

@BrianTompsett Спасибо, просто проверил ссылку, которую вы отправили. Однако они используют $ java HelloWorld для запуска HelloWorld.class. Я могу сделать это просто отлично. Я пытаюсь создать исполняемый файл, чтобы только вводить $./HelloWorld для запуска программы. – sweepez

+0

Как сказал Том ниже; все, что описано в классе Принстона, является правильным. Так обстоит дело в мире. Вам действительно нужно проверить у своего преподавателя, почему компьютер вашей школы делает это по-другому. Возможно, они используют другой компилятор Java, который генерирует исполняемый код, но тогда это не стандартный компилятор, который использует остальная часть мира. Нам трудно ответить, когда ваша школа, по-видимому, делает это по-другому; либо это, либо вы что-то неправильно поняли. Единственный способ узнать - спросить в школе. То, что Том и я сказал, правильно; и именно поэтому дал вам ссылку. –

ответ

1

Эта команда:

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.

+0

Поблагодарите Tom, есть ли какие-либо изменения, которые я могу сделать, чтобы запустить его как двоичный файл. Когда я с ssh с терминалом в среду UNIX школы, файл работает нормально, просто используя ./HelloWorld. Это были инструкции к make-файлу, данные профессором, я надеялся не использовать $ java -jar HelloWorld для запуска файла на моей локальной машине, а вместо этого просто использовать ./HelloWorld – sweepez

+0

Вы проверили, что их «HelloWorld»? Это может быть простой сценарий оболочки, который просто вызывает реальную программу Java. – Tom

+0

Подождите, скажите это снова. проверить что? извините :( – sweepez

Смежные вопросы