From: Lönnstedt P. <pet...@sa...> - 2010-05-19 10:38:35
|
Hi, I am performing a test by developing an example in Eclipse on Linux (CentOS) in C++ (gcc-4.1.2-46) that I call from Java (java-1.6.0-openjdk). The example works fine on Windows XP. In my test program in Java: When my class calls an implented virtual method (declared pure virtual in the base class) I get the following error: # SIGSEGV (0xb) at pc=0x0028f1f2, pid=31174, tid=3086662544 # # Java VM: OpenJDK Server VM (1.6.0-b09 mixed mode linux-x86) # Problematic frame: # C [libSwigTestSharedLib.so+0x11f2] Java_exampleJNI_JavaCircle_1perimeter+0x12 # # An error report file with more information is saved as: # /home/stpeln/swig/example_test/workspace/SwigTest/hs_err_pid31174.log # # If you would like to submit a bug report, please visit: # http://icedtea.classpath.org/bugzilla # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. There is no problem to call non-virtual methods that are implemented in the base class as well as methods implemented in the class itself. Another problem is that when I declare static members, swig wraps this in order but my Java code cannot even load the generated library (the System.loadLibrary command fails). This is my C++ code: #ifndef __test_shape_h #define __test_shape_h class JavaShape { public: JavaShape(); virtual ~JavaShape(); double x, y; void move(double dx, double dy); virtual double area() = 0; virtual double perimeter() = 0; }; #endif #ifndef __test_circle_h #define __test_circle_h #include "test_shape.h" class JavaCircle : public JavaShape { private: double radius; public: JavaCircle(double r); // Implemented in this class: virtual double area(); virtual double perimeter(); int myInt(); }; #endif This is my Java code: JavaCircle myCircle = new JavaCircle(3); // This works fine. myCircle.move(1.0, 2.0); myCircle.myInt(); // This crashes the program: myCircle.area(); Would be great if anyone has an explanation for this! Thanks, / Petter |