Re: Mixing BC and CNI in the same executable
Stephen Kell <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
> It's a combination of bugs. Firstly, there's a bug in libgcj when a > needed class is not found in an executable: it causes a crash when > trying to report the problem. Fixed thusly: Thanks very much for this! My program does indeed now run as it's supposed to (i.e. back to coding...). > Thirdly, you aren't linking in inner classes. This works for me: > > gcj -fno-eliminate-unused-debug-symbols > -fno-eliminate-unused-debug-types -findirect-dispatch > -fno-indirect-classes -fpic -g3 > --classpath=./java:./antlr-runtime-3.1.3.jar:: -Wall -Wl,-R. > cake.o main.o parser/parser.a antlr-runtime.jar.so > stringtemplate.jar.so -lstdc++ -o "cake" -Wl,-Map,map > java/cake/TreewalkError.o java/cake/InternalError.o > java/cake/CloneableTree.o > java/cake/SemanticError.o ./parser/cake/cakeJavaParser\$DFA*.o ./parser/cake/cakeJavaLexer\$DFA*.o ./parser/cake/cakeJavaParser\$*_return.o > > It would be better to compile from .java -> .o, and then you would not > have to worry about all the inner classes. Aha... I had been stuffing all the .o files (including inner classes) into parser.a, hoping it would be sufficient to link with that, but clearly this was a bad plan. (I guess only symbols with link-time references get linked... meanwhile --whole-archive fails because of multiple definitions of others.) Thanks again, Stephen.