Archive for 3月 25th, 2013

  1. Hello, GCJ World!

    Posted on 3月 25th, 2013 by cx20

    GCJ

    GCJ は GNU Compiler for the Java の略で、GCC に含まれるコンパイラの1つである。
    Java のライブラリが使用できるほか、CNI(Compiled Native Interface)を用いることで、C++ で作成したライブラリを呼び出すことが可能となっている。

    ソースコード(Java)

    public class Hello {
        public static native void printf( String format );
     
        public static void main( String[] args ) {
            printf( "Hello, GCJ World!n" );
        }
    }

    クラスファイル作成

    C:¥> gcj -C Hello.java

    C++ ヘッダファイル作成

    C:¥> gcjh Hello.class

    ソースコード(C++ ヘッダファイル)

     
    // DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
     
    #ifndef __Hello__
    #define __Hello__
     
    #pragma interface
     
    #include <java/lang/Object.h>
    #include <gcj/array.h>
     
    extern "Java"
    {
        class Hello;
    }
     
    class Hello : public ::java::lang::Object
    {
     
    public:
      Hello();
      static void printf(::java::lang::String *);
      static void main(JArray< ::java::lang::String * > *);
      static ::java::lang::Class class$;
    };
     
    #endif // __Hello__

    ソースコード(C++ 実装ファイル)

    #include <stdio.h>
    #include <java/lang/String.h>
    #include "Hello.h"
     
    void ::Hello::printf(::java::lang::String* format )
    {
        int len = format->length();
        for ( int i = 0; i < len; i++ )
        {
            ::printf( "%c", format->charAt(i) );
        }
    }

    コンパイル方法

    C:¥> gcj -c Hello.cpp
    C:¥> gcj --main=Hello -o Hello Hello.o Hello.class

    実行結果

    Hello, GCJ World!