代码之家  ›  专栏  ›  技术社区  ›  Germán

如何在Ant中使用GCJ?

  •  6
  • Germán  · 技术社区  · 14 年前

    我的应用程序在Scala中,所以我需要使用GCJ以.class文件作为源。编译时没有问题。scala到。用Ant初始化。

    首先,我找到了如何手动将.class文件编译为.o(对象),方法如下:

    gcj --classpath=(...) -c (somepath)MouseClickListener.class -o (somepath)MouseClickListener.o
    

    我懂了 here Ant通过javac标记支持GCJ编译。所以我想这应该管用:

    <target name="gcjCompile" depends="compile">
        <mkdir dir="${object.dir}" />
        <javac srcdir="${build.dir}"
               destdir="${object.dir}"
               compiler="gcj"
               executable="C:/gcc/gcc-4.3/bin/gcj.exe"
               classpathref="gcjProject.classpath">
            <include name="**/*.class"/>
        </javac>
    </target>
    

    但是这个javac任务什么也不做,我也没有错误。有线索吗? 谢谢

    1 回复  |  直到 14 年前
        1
  •  1
  •   SEK    14 年前

    听起来你想将你的应用链接到本机可执行文件中。这意味着您已经将源代码编译成了JVM字节码(正如您通过将.scala编译成.class文件所发现的那样)。你需要运行 gcj 使用 <exec> 将字节码编译为gcc对象代码文件的任务。

    <property name="main.class" value="Main" />
    <property name="class.dir" value="${basedir}/classes" />
    <target name="compile">
      <mkdir dir="${class.dir}" />
      <javac srcdir="${build.dir}"
             destdir="${class.dir}"
             compiler="gcj"
             executable="C:/gcc/gcc-4.3/bin/gcj.exe"
             classpathref="gcjProject.classpath">
        <include name="**/*.java"/>
      </javac>
    </target>
    <target name="link" depends="compile">
      <mkdir dir="${object.dir"} />
      <exec cmd="C:/gcc/gcc-4.3/bin/gcj.exe">
        <arg value="-classpath=${object.dir}" />
        <arg value="-c" />
        <arg value="*.class" />
      </exec>
    </target>
    

    请记住,您需要定义 build.dir object.dir depends 在编译目标中的javac之前执行任务(或者每次都从头开始重新编译)。我可能漏掉了很多东西,如果一开始不起作用,你应该检查手册页(gcj、gcc和ant)。