Thanks very much, D-Man, Sorry for my late reply, I was on a holiday. I have no experience with C/C++ yet, but I will keep your explanations, as I am willing to learn.
On Tue, Jan 30, 2001 at 04:18:04PM -0500, D-Man wrote: > On Sat, Jan 27, 2001 at 08:43:04PM +0100, Andreas Hetzmannseder wrote: > | Dear debian-users, > | > | This is really stupid, but I don't know any further. > | Every time I try to compile some java source code - actually the HelloWorld > | example from the Debian Java FAQ - I get error messages: > | > | with gcj: > | /usr/lib/crt1.o: In function `_start': > | /usr/lib/crt1.o(.text+0x18): undefined reference to `main' > | collect2: ld returned 1 exit status > > gcj outputs C++ object files from the Java source. Then (unless you > gave it the -c option) it links it to form an ELF binary (just like > C/C++). The problem is the linker can't find main. > > int main( int argc , char** argv ) > { > /* ... */ > return 0 ; > } > > > The solution is to tell gjc where main is: > > gcj --main=MyJavaClassDefiningMain *.java > > > gcj will then run a script (installed with it) to spit out some C/C++ > code with the appropriate main() function that will call the main you > defined in your Java class. If you give gcj the -c option it will > stop when it has produced C++ object files (.o). You can then link > them at the end. > > gcj also has a -C option will tells it to output Java bytecodes > (.class) instead. These will then need some JVM (jre, kaffe, etc) to > run. The -C option is exactly what I needed... > > | > | with jikes: > | Found 2 system errors: > | > | *** Error: Could not find package named > | /usr/share/java/repository/java/util > | > | *** Error: Could not find package named > | /usr/share/java/repository/java/lang > | > > The packages java.util and java.lang can't be found by the compiler. > I haven't used jikes before so I can't be more specific. Maybe a > CLASSPATH problem? I managed to run the following: jikes -classpath /usr/share/java/libgcj.zip MyApp.java I still don't know what to do with /usr/share/java/repository - it's empty... > | with kaffe's kjc: > | java.lang.NoClassDefFoundError: at/dms/kjc/Main > | at java.lang.Throwable.<init>(Throwable.java:38) > | at java.lang.Error.<init>(Error.java:21) > | at java.lang.LinkageError.<init>(LinkageError.java:21) > | at > java.lang.NoClassDefFoundError.<init>(NoClassDefFoundError.java:21) > | > > I guess that kjc is a shell script that tries to run a java program. > Apparently the main() function here is in the class "Main" in the > package "at.dms.kjc" and the class can't be found. This is definitely > a CLASSPATH problem. > > When I tried out kaffe, it had the commands "javac" for compiling and > "java" for executing bytecodes. I think they were really just > symlinks to the kaffe commands. Perhaps trying these commands will > help? javac is not available in my version of kaffe (1.0.5) > | BTW: Running ready programs with kaffe works just fine... > | > | I put the following entry into my ~/.profile: > | export CLASSPATH=/usr/share/kaffe > > I would recommend against this. At my present job I am using a Win2k > box (with cygwin of course) and Sun's jdk. I found it is much better > to make a whole collection of shell scripts that execute the proper > JVM (I have 1.1.8, 1.2.2, and 1.3 installed) with the proper classpath > stuff on the command line. [...] For the time being I only have kaffe's JVM installed (Sun's jdk 1.2 is running with win95...) - I will keep this in mind when it comes to additional JVMs. Thank you very much again, Andreas.