invoke GCJ .o files from C/C++ program

Cecilia Vy-Ai Le a1tv86@yahoo.com
Wed Jul 12 11:23:00 GMT 2000


I build libgcj-snapshot-20000707 with egcs-20000626 on
Solaris 2.6 machine.  

>$ gcj MainApp.java JavaTool.java RunApp.cc
>--main=MainApp -o app -I.
>
>.... and it works fine:
>
>$ ./app
>Hello World from Java

The problem is still there.  Here is the stack trace:

(gdb) run
Starting program:
/export/home/cecilia/test/HelloCCJava 

Program received signal SIGSEGV, Segmentation fault.
0xef4552f8 in GC_find_limit (p=0xeffff56c "", up=1)
    at
../../../../source/libgcj-snapshot-2000-07-07/boehm-gc/os_dep.c:627
(gdb) c
Continuing.
>From .cc file:

Program received signal SIGILL, Illegal instruction.
0xef6e4ba0 in _CL_Q34java4util4Date () from
/usr/local/lib/libgcj.so.1
(gdb) bt
#0  0xef6e4ba0 in _CL_Q34java4util4Date () from
/usr/local/lib/libgcj.so.1
#1  0x16350 in JavaMain::run () at CCRunJava.cc:14
#2  0x162bc in JavaMain.main (args=0x355ac) at
JavaMain.java:7
#3  0xef64cafc in gnu::gcj::runtime::FirstThread::run
(this=0xef2e8f30)
    at
../../../../source/libgcj-snapshot-2000-07-07/libjava/gnu/gcj/runtime/natFirstThread.cc:146
#4  0xef656b7c in java::lang::Thread::run_
(obj=0xef2e8f30)
    at
../../../../source/libgcj-snapshot-2000-07-07/libjava/java/lang/natThread.cc:263
#5  0xef66dd28 in _Jv_ThreadStart (thread=0xef2e8f30, 
    meth=0xef6569f4
<java::lang::Thread::run_(java::lang::Object *)>)
    at
../../../../source/libgcj-snapshot-2000-07-07/libjava/no-threads.cc:28
#6  0xef656c90 in java::lang::Thread::start
(this=0xef2e8f30)
    at
../../../../source/libgcj-snapshot-2000-07-07/libjava/java/lang/natThread.cc:294
#7  0xef571878 in JvRunMain (klass=0x355ac, argc=1,
argv=0xeffffcfc)
    at
../../../../source/libgcj-snapshot-2000-07-07/libjava/prims.cc:884
#8  0x1ffac in main (argc=1, argv=0xeffffcfc)
(gdb) 

Here is my test case:
===JavaMain.java===
public class JavaMain
{
  private int version;
  public native static void run();
  public static void main(String args[])
  {
    run();
  }
}
===JavaMain.h==
// DO NOT EDIT THIS FILE - it is machine generated -*-
c++ -*-

#ifndef __JavaMain__
#define __JavaMain__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  class JavaMain;
};

class ::JavaMain : public ::java::lang::Object
{
public:
  static void run ();
  static void main (JArray< ::java::lang::String *>
*);
  JavaMain ();
private:
  jint version;
};

#endif /* __JavaMain__ */
===JavaTool.java===
public class JavaTool {
  public void printLine(){
    System.out.println("Hello World from Java");
  }
}
===JavaTool.h===
/ DO NOT EDIT THIS FILE - it is machine generated -*-
c++ -*-

#ifndef __JavaTool__
#define __JavaTool__

#pragma interface

#include <java/lang/Object.h>

extern "Java"
{
  class JavaTool;
};

class ::JavaTool : public ::java::lang::Object
{
public:
  virtual void printLine ();
  JavaTool ();
};

#endif /* __JavaTool__ */
===CCRunJava.cc====
#include <iostream.h>

#include "JavaMain.h"
#include "JavaTool.h"

void JavaMain::run (void)
{
  cout << "From .cc file:\n";

  JavaTool *psTool = new JavaTool();
  psTool->printLine();
}
===END===

To generate the executable:
gcj --main=JavaMain -o HelloCCJava JavaMain.java 
JavaTool.java CCRunJava.cc -lstdc++

Would you please tell me which egcs and libgcj
snapshot you tried the program with?  Which platform
did you test the program successfully?

I really need the answer.
Thanks,
Cecilia.

__________________________________________________
Do You Yahoo!?
Get Yahoo! Mail – Free email you can access from anywhere!
http://mail.yahoo.com/


More information about the Java mailing list