【问题标题】:How does Java handle linking during compilation?Java 在编译期间如何处理链接?
【发布时间】:2015-10-29 15:33:04
【问题描述】:

我有一个makefile,其中一个层次结构相当高的Java类依赖于大量其他类。我的基本问题是我能做到以下几点:

$(bigClass).class: $(smallOne).class ... $(lastSmallOne).class $(bigClass).java

javac bigClass.java smallOne.java ... lastSmallOne.java

它仍然是最佳的。 javac 会为我处理这一切吗?还是我需要通过 gcc 和 c 代码之类的链接详细信息?换句话说,如果只有其中一个没有更新,javac 会发现“哦……好吧……我需要做的就是在这里编译这个然后重新链接”?如果不是,那么简单语句“gcc -o object1.o object2.o”的 javac 等效项是什么?

【问题讨论】:

  • Java 中没有链接步骤。您永远不会将字节码转换为可执行文件,而是将其交给 Java 虚拟机,该虚拟机进行即时编译以实际运行它。
  • 你为什么要尝试use make 来构建Java?你真的应该考虑使用像maven这样的现代工具。
  • 使用make 构建Java - 你似乎有某种自虐倾向......
  • @azurefrog - 有一个链接步骤,但它会在您运行 Java 字节码时自动发生,它可能会或可能不会由 VM 编译。
  • @AndyThomas 好吧,动态链接确实在执行期间发生,但是这个问题专门询问在编译期间将程序链接在一起。我想我应该更具体地说“在 Java 中没有链接执行之前”。

标签: java compilation linker


【解决方案1】:

如果 bigClass 使用 smallOne(如成员变量或方法的静态引用等),那么 java 将同时构建它们,您只需要提供主类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多