java - gcc -x java on debian stretch

标签 java linux gcc debian

Using the GNU Compiler Collection gcc 6.3.0 版的手册在第 28 页(pdf 的第 42 页)表示支持语言选项 -x java。在 debian stretch 上尝试这个:

$ gcc -x java HelloWorld.java
gcc: error trying to exec 'ecj1': execvp: No such file or directory

安装似乎是必需的包:

$ sudo apt-get install ecj1
Reading package lists... Done
...
Unpacking ecj1 (3.11.1-1) ...
Setting up ecj1 (3.11.1-1) ...
....
Reading state information... Done

但是,在此之后运行 gcc 时,我得到了相同的错误消息。事实上查看 /usr/bin,没有安装可执行文件 ecj1,运行 apt-cache search ecj1 没有提示任何其他包比我安装的那个。

$ gcc --version
gcc (Debian 6.3.0-11) 6.3.0 20170321

$ uname -a
Linux right 4.8.0-1-amd64 #1 SMP Debian 4.8.5-1 (2016-10-28) x86_64 GNU/Linux

关于我还可以尝试让它运行的任何建议吗?

最佳答案

必须安装用于 Java 的 GNU 编译器:

$ apt-get install gcj-4.9 gcj-4-9-jdk

使用 apt-file 搜索包含 ecj1 作为文件的包。请注意,apt-cache 仅搜索与搜索匹配的包名称/描述。

安装后我可以使用

$ gcj-4-9 HelloWorld.java

而不是 gcc。

尽管 gcj 是 gcc 的前端,但 gcc 对我不起作用并且提示没有设置类路径。要让 gcc 工作,它可能需要一个不同的、更复杂的命令。

如果您正在编译包含 main 方法的类,请使用 --main 选项。

$ gcj-4-9 --main=HelloWorld HelloWorld.java

关于java - gcc -x java on debian stretch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278805/

相关文章:

console - 如何将控制台与 Java 应用程序关联起来?

linux - 检测代码是否读取了指定的输入文件

c - 通过读取 proc/<pid>/status 打印进程信息

c - 无需指定 'lib' 前缀即可在 gcc 中链接静态库

c++ - 私有(private)静态成员可以用作其类的成员函数的默认参数吗?

java - 如何在 java 中用 BigDecimal 替换 double 以获得金钱

java-Thymeleaf : how get next date?

java - Spring/JPA/JSF 的异常处理策略

监控进程和子进程的Python脚本

控件到达具有自定义退出功能的非空函数的结尾