[gcj+cni] Segmentation fault when accessing java code from c++

Christian Nolte ch.nolte@noltec.org
Wed Apr 23 20:47:00 GMT 2008


David Daney schrieb:
> Christian Nolte wrote:
>>>>> int main() {
>> Test t;
>> t.test2();
>> }
>> - ---
>>> .
> .
> .
>>>> Am I doing something wrong, i.e. do I miss some preinitialization which
>> is needed to get CNI working? Or is this a bug in my libgcj?
>>>> In short yes. If you are calling from C++ into CNI code, you must use
> the invocation interface (much as you must use the JIN invocation
> interface when using JIN).
>> See: http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcj/Invocation.html

Thank you very much for that hint! That did the trick.
Just for the record, this is what I did:
--- Test.cpp
#include <gcj/cni.h>
#include <java/lang/System.h>
#include <java/io/PrintStream.h>
#include <java/lang/Throwable.h>
#include "Test.h"
int main() {
 using namespace java::lang;
 try
 {
 JvCreateJavaVM(NULL);
 JvAttachCurrentThread(NULL, NULL);
 JvInitClass(&Test::class$);
 Test t;
 t.test2();
 Test::test();
 JvDetachCurrentThread();
 }
 catch (Throwable *t)
 {
 System::err->println(JvNewStringLatin1(
	"Unhandled Java exception:"));
 t->printStackTrace();
 }
}
---
	g++ -c Test.cpp
and
	gcj Test.o -ltest -L. -o testprog
then
[nolte@ravine java-test]$ ./testprog
test2() called
test() called
-- 
 For more than 4 generations the IT Professionals were the
 guardians of quality and stability in software. Before the
 dark times.	Before Microsoft...


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /