问题标签 [gcj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
2957 浏览

java - Is GCJ (GNU Compiler for Java) a viable tool for publishing a webapp?

Is it really viable to use GCJ to publish server-side applications? Webapps?

My boss is convinced that compiling our (my) webapp into a binary executable is a brilliant idea. (Then again, he likes nice, small simple things with blinky lights that he can understand.) He instinctively sees no issues with this, while I only see an endless series of problems and degradations. Once I start talking to him about the complexity of our platform, and more in depth specifics of byte code, JVMs, libraries, differences between operating systems, processor architectures, etc...well...his eyes glaze over, he smiles and he has made it clear he thinks I'm being childishly resistive.

Why does he want a single magic executable? He sees a couple of "benefits":

  • If it is a binary executable, then it is hard to reverse engineer and circumvent any licensing. Management lives in constant fear that this is happening, even though we sell into larger corporates who generally do not do cheat with server software.
  • There is that vision of downloading this magic executable, running it, and everything works. (No more sending me out to do customer installations, which is not that frequent.)

So, I've done my obligatory 20 minutes of googling, and now I am here.

A bit of background on my application:

What it is made from:

  • Java 6 (Sun's JVM)
  • AspectJ 1.6
  • Tomcat 6
  • Hibernate 3
  • Spring 2
  • another two dozen supporting jar files

What it does

  • A streaming media CMS
  • Performance sensitive
  • Deployed on Linux, Solaris, Windows (and developed on a Mac)

As you can probably gather, I'm highly skeptical of this "compiling Java to native code" thing. It sound like where Mono (VB on Linux) was back in 2000. But am I being overly pessimistic? Is it viable? Should I actually spend the time (days if not weeks) to try this out?

There is one other similar thread (Java Compiler Options to produce .exe files) but it is a bit too simple, the links dated, and not really geared towards a server-side question.

Your informed opinions will be highly cherished, my dear SOpedians! TIA!

0 投票
2 回答
504 浏览

java - 这里的任何人都有使用gcj的CNI for java外部库的经验吗?

一段时间以来,我一直对在桌面应用程序上做一些工作很感兴趣,而我最精通的语言是 Java。由于希望能够编译为本机可执行文件,是否有人愿意分享有关使用 gcj 编译和 CNI 库的经验?我希望使用本机工具包,而不仅仅是 Swing/SWT。

0 投票
1 回答
3097 浏览

java - 为什么 GCJ 从我导入的包中找不到类?

我想将一个小型 Java 应用程序编译为 Windows 可执行文件。

该应用程序非常小,只有一个主类,但它使用 Apache POI。

当我编译它时,一切正常,只要我将 POI Jar 放入类路径参数中。

但是当涉及到链接时,GCJ 无法解析 POI 包中的类的引用。消息都是这样的:

我必须做什么才能链接我的应用程序?

0 投票
2 回答
1014 浏览

java - GCJ 问题 (jc1.exe)

我不知道这是否是 StackOverflow 上要问的那种问题,但无论如何我都会问。

我在 Windows XP SP3 上使用 GCJ(作为 MinGW 的一部分)将 Java 类编译为 EXE。

Java 类是:

现在,当我使用 Java 源文件运行 GCJ 时,它会失败并显示:

然后我编译了 Java 类并再次运行 GCJ,但它再次失败:

为什么要这样做,我该怎么做才能使 GCJ 工作?

0 投票
1 回答
3825 浏览

java - 如何在使用 GCJ 编译期间将两个 Java 文件链接在一起?

我很抱歉,因为我是一个“Java 菜鸟”。无论如何,我认为我已经把这个问题简单化了,可以用一种直截了当的方式提问,并且会给我想要的答案。假设我有两个文件,都在我的主目录中,如下所示:

测试.java:

Test2.java:

现在,如果我将这些文件保持原样,当我运行“ gcj Test.java --main=Test”时,自然会得到一个错误,保存 Test2 未定义。但我不知道我需要添加什么来告诉它在哪里可以找到 Test2。我尝试在 Test.java 的顶部添加“ import Test2;”、“ import Test2.*;”和“ import Test2.java;”,但显然我在这里没有走在正确的轨道上。我需要做什么才能将这些文件链接在一起并进行编译?

0 投票
5 回答
394 浏览

java - 使用 GNU Compiler for Java 而不是 Sun JDK 编译 Java 时的差异

我正在做一个学校项目,我需要使用 GNU Compiler for Java。我一直使用官方的 Sun JDK,现在我担心可能会使我的工作复杂化的差异。

我对最新的 GCJ 编译器支持的 Java 版本特别感兴趣

有人可以阐明两者之间的差异吗?

PS:我在谷歌上搜索但没有找到最近的答案

0 投票
2 回答
449 浏览

java - 如何忽略 GCJ 的警告

我有一些实现接口的类,其中一些具有根据定义在特定类实现中未使用的参数的方法。例如,“Shape”接口可以定义“contains(point)”方法,但我的特定类定义了一条线,它不能包含任何东西,因为它是一维的,所以它总是返回 false 并且从不使用点。

然而,当我使用 GCJ 进行编译时,我受到了数百条“警告:参数 x 未使用”消息的攻击。

我尝试使用 -Wno-all 标志来禁用警告,以及 gcj 手册页中记录的其他标志,但这些都没有效果。我如何指示 GCJ 不要用这些琐碎的警告来打扰我?

0 投票
3 回答
722 浏览

java - 引用 Linux 可执行文件的库

我用 Java 编写了一个应用程序,并使用gcj成功编译了它。它工作得非常好,但我遇到了一个障碍:我只能通过 shell 脚本运行可执行文件,因为我必须指定库路径。

我需要的库是 SWT、Xerces 和 GNU-crypto。

有没有办法在编译时静态链接库gcj,或者这不是一个好主意?或者,我可以在编译时指定(相对)库路径吗?

目前,我的 shell 脚本如下所示:

0 投票
3 回答
897 浏览

java - 根据 Java 版本运行不同的 Bash 命令

我正在尝试为将在 Ubuntu 和 Fedora 上运行的 Java 项目开发一个 bash 构建脚本。Ubuntu 使用 gcj 编译器,而 Fedora 使用 IcedTea。

两者都以稍微不同的方式报告错误和警告,我想忽略警告(我知道,这通常不是一个好主意,但有些警告简直是白痴)。

对于 gcj,我想运行:

但对于 IcedTea,我想运行:

我还是 bash 的新手,那么我将如何编写一个 if 语句来根据 javac 版本运行一个与另一个?

0 投票
2 回答
1032 浏览

java - 在没有 gcj 的情况下结合 Java 和 C——将 C 移到 Java 或 Java 到 C?

首先,我没有这样做的经验。但是就像任何好的程序的开始一样,我有需要解决的问题,所以我愿意学习。

你们中的许多人可能已经熟悉 pdftk,它是处理各种 pdf 相关任务的便捷实用程序。据我所知,这些功能中的大多数都可以在更新、更轻的库/扩展中使用,除了我需要的(并且可能是它仍然存在的唯一原因):将表单数据文件(fdf 和 xfdf)与表单合并PDF 并获取一个新文件作为输出。

问题是我的服务器没有 gcj,这是构建/编译 pdftk 的基础。我不知道是因为我在 Solaris 上还是因为其他一些系统管理员级别的原因,但我不会很快得到 gcj。据我所知,没有为 Solaris 预编译的二进制文件。

所以我认为可以重写MAKE文件和C代码以直接通过javac导入Java库(非常古老的itext版本)。

但我不确定从哪里真正开始。我所知道的是:

  1. 完成后我想要一个二进制文件,这样每次使用都不需要 Java VM。
  2. 当前应用程序使用 GCJ。

所以我的第一个想法是“哦,这很容易,我可能可以用其他一些基于 C 的方法来调用这些类”,但是我没有找到一个简单的方法来做到这一点,而是在各个角度找到了大量冗长的帖子这可以接近,等等。

然后我在 Sun 的网站上找到了一个关于如何在 Java 类中调用其他语言(如 C)的页面。但这种方法的问题是:

  1. 我必须为包装器写一个包装器
  2. 我最好跳过那部分并用Java编写整个东西
  3. 如果我可以导入已有的类,我还没有准备好
  4. 我不清楚我是否可以在最后编译并获得一个二进制文件,或者我是否被困在每次都需要 Java 中。

再次,我为我的无知道歉。我只需要一些建议和示例,说明如何将依赖 GCJ 的 C 代码替换为直接与 Java 一起工作的代码。

当然,如果我要问“如果我们能做到这一点,我们就已经很有钱了”类型的问题,请告诉我。