Re: Linking .jar.so

Benjamin de Dardel <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
Hi David,

Thanks for your response : I can compile my tests now.
But I have some errors in the execution.
I don't know what is missing ?

 >> the first one, without -findirect-dispatch option :
- cpp
org::apache::tools::ant::Main * pMain = new org::apache::tools::ant::Main();

$ gcj -shared -fjni -fPIC -Wl,-Bsymbolic /opt/ant/lib/ant-launcher.jar 
-o ant-launcher.jar.so
$ gcj -shared --classpath=/opt/ant/lib/ant-launcher.jar -fjni -fPIC 
-Wl,-Bsymbolic /opt/ant/lib/ant.jar -o ant.jar.so
...
$ ./test.bin
Unhandled Java exception:
java.lang.NoClassDefFoundError: org.apache.tools.ant.Main
   at java.lang.Class.initializeClass(natClass.cc:727)
Caused by: java.lang.NullPointerException
   at java.lang.Class.initializeClass(natClass.cc:717)

 >> the second one, by instrospection :
- cpp
String *className = JvNewStringLatin1("org.apache.tools.ant.Main");
Class::forName( className );

$ gcj -shared -findirect-dispatch -fjni -fPIC -Wl,-Bsymbolic 
/opt/ant/lib/ant.jar -o ant.jar.so
$ gcj -shared -findirect-dispatch -fjni -fPIC -Wl,-Bsymbolic 
/opt/ant/lib/ant-launcher.jar -o ant-launcher.jar.so
...
$ ./test.bin
Hello from C++
Unhandled Java exception:
java.lang.ClassNotFoundException: org::apache::tools::ant::Main
   at java.lang.Class.forName(natClass.cc:101)
   at java.lang.Class.forName(natClass.cc:125)

David Daney a écrit :
>
> Benjamin de Dardel wrote:
>> Hi all,
>>
>> I'm trying to convert .jar to .so and then linking it with a .cpp 
>> program.
>> Here are the steps I did.  I fail to link .o and .so ! May be you 
>> have an idea to solve this problem ?
>>
>> Thanks,
>> Benjamin
>>
>>  >> ERROR
>> $ gcj -o essai3.bin essai3.o -L . -lgcj -lstdc++ ant.jar.so 
>> ant-launcher.jar.so
>> test.o: In function `main':
>> test.cpp:22: undefined reference to `void 
>> org::apache::tools::ant::Main::main(JArray<java::lang::String*>*)'
>> collect2: ld returned 1 exit status
>>
>>  >> STEPS
>> $ gcj -shared -findirect-dispatch -fjni -fPIC -Wl,-Bsymbolic 
>> /opt/ant/lib/ant.jar -o ant.jar.so
>> $ gcj -shared -findirect-dispatch -fjni -fPIC -Wl,-Bsymbolic 
>> /opt/ant/lib/ant-launcher.jar -o ant-launcher.jar.so
>> $ gcjh -v -cni -classpath 
>> /opt/ant/lib/ant.jar:/opt/ant/lib/ant-launcher.jar:/usr/lib/jvm/java-6-sun/jre/lib/rt.jar 
>> org.apache.tools.ant.Main
>> $ g++ -c -g -O -I. test.cpp
>> $ gcj -o essai3.bin essai3.o -L . -lgcj -lstdc++ ant.jar.so 
>> ant-launcher.jar.so
>>
>>  >> Program : test.cpp
>> #include <gcj/cni.h>
>> #include <java/lang/System.h>
>> #include <java/io/PrintStream.h>
>> #include <java/lang/Throwable.h>
>>
>> #include <org/apache/tools/ant/Main.h>
>>
>> int main(int argc, char *argv[])
>> {
>>    using namespace java::lang;
>>
>>    try
>>    {
>>         JvCreateJavaVM(NULL);
>>         JvAttachCurrentThread(NULL, NULL);
>>
>>         String *message = JvNewStringLatin1("Hello from C++");
>>         JvInitClass(&System::class$);
>>         System::out->println(message);
>>              org::apache::tools::ant::Main::main(NULL);
>>        
>
> You cannot use  -findirect-dispatch with CNI like this.
>
> You might be able to use reflection to invoke main, or don't compile 
> the main class with -findirect-dispatch.
>
>
>>         JvDetachCurrentThread();
>>    }
>>    catch (Throwable *t)
>>    {
>>         System::err->println(JvNewStringLatin1("Unhandled Java 
>> exception:"));
>>         t->printStackTrace();
>>    }
>> }
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.