gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:58:52 26 4
gpt4 key购买 nike

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

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

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

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

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

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

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

    然后我在 Sun 的网站上找到了一个关于如何在 Java 类中调用其他语言(如 C)的页面。但这种方法的问题是:
  • 我必须为包装器
  • 编写一个包装器
  • 我可能最好跳过那部分并用Java编写整个内容
  • 我还没有准备好,如果我可以导入已经存在的类
  • 我不清楚我是否可以在最后编译并获得一个二进制文件,或者我是否被困在每次都需要 Java 中。

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

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

    最佳答案

    我不确定您到底在寻找什么,所以我提供了几个答案。

    如果您有需要运行的 java 代码,则必须:

  • 在 jvm 中运行它。您可以在自己的自定义 c 代码中启动该 vm,但它仍然使用 jvm
  • 用另一种语言重写它。
  • 使用提前编译器进行编译(例如 gcj)

  • 顺便说一句,您可以在您的主文件夹中编译 gcj 的副本并使用它。我相信魔法开关是 --enable-languages=java,c (见: here 了解更多)

    如果您有想要从 java 调用的 c 代码,您有四个选项:
  • Java native 接口(interface) (JNI)。看来你找到了
  • Java native 访问 (JNA)。这比 JNI 慢,但需要更少的编码并且不需要包装 c 代码。它确实需要一个 jar 和一个库
  • 创建一个 CLI 实用程序并使用 Runtime.Exec(...) 调用它。
  • 使用某种进程间通信让 Java 代码要求 c 代码执行操作并返回结果。

  • 其他平台相关选项
  • 使用 JACOB(仅限 win32:com 访问)
  • 关于java - 在没有 gcj 的情况下结合 Java 和 C —— 将 C 移到 Java 或 Java 到 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191842/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com