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