GCJ with native structs
Stanley Brown
stanley.brown@zimmer.com
Mon Dec 8 20:11:00 GMT 2003
I am having a problem where gcj is unable to handle my CNI code creating
an instance of a structure. I created a simple example to illustrate:
public class Test
{
public Test()
{
nativeTest();
}
public native void nativeTest();
public static void main(String args[])
{
new Test();
}
}
Okay, now I used gcjh to create a stub and header. Heres the Test.cc code:
#include <gcj/cni.h>
#include "Test.h"
typedef struct
{
int a;
} TestStruct;
void
Test::nativeTest ()
{
new TestStruct;
}
I compile the C++ code:
g++ -c Test.cc -o natTest.cc
Now build:
gcj --main=Test Test.java natTest.o
Heres the error I get:
natTest.o(.text+0xe):Test.cc: undefined reference to `operator
new(unsigned)'
natTest.o(.rdata$_ZTI4Test+0x0):Test.cc: undefined reference to `vtable
for __cx
xabiv1::__class_type_info'
Do I need to add something for linking? I tested the following using
just C++ and it worked fine:
class Test
{
public:
Test ();
virtual void nativeTest ();
};
typedef struct
{
int a;
} TestStruct;
Test::Test () {}
void
Test::nativeTest ()
{
new TestStruct;
}
main()
{
Test *test = new Test();
test->nativeTest();
}
gcc (GCC) 3.4 20031123 (experimental) on Windows XP
More information about the Java
mailing list