This is the mail archive of the java-discuss@sourceware.cygnus.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Linking bug (?) and linking questions


Korbinian Strimmer wrote:
> 1) Linking is not possible when object with main function is
>    part of a package (THIS MIGHT BE A BUG):

[snip]

> Compiles perfectly to Sample.class (given a proper location)
> and to Compile.o but does not link:
> 
>   cj  -o sample --main=Sample Sample.o

Use the fully-qualified class name:

  gcj -o sample --main=test.Sample Sample.o

> 2) Easier linking:
> 
>    How can I avoid to specify the objects to be linked manually?
>    After all, the compiler does know by itself where the compiled
>    classes are (through CLASSPATH) and even gives me a list of
>    dependencies if I want?
> 
>    Any tricks for that?  (This would make life much easier because
>    bascially all objects in my library are to some degree related with
>    each other. Apart from that, the precise path where the objects
>    actually reside changes from system to system).

You'll probably want to use a Makefile, as you would in any non-trival C
program.

You might try adding each object to a library, e.g.:

  gcj -c Class1.java -o Class1.o
  gcj -c Class2.java -o Class2.o
  ar rv myclasses.a Class1.o Class2.o
  ranlib myclasses.a

then:

  gcj myprog.java --main=myprog myclasses.a -o myprog

> 3) Maybe I can link versus the whole library?  If so, how do I
>    link with gcj all my libary objects (that do not contain a
>    main function) together to one single file?  Can this file be
>    used a shared library?

It can be a shared library, or normal (.a) library archive.  See above. 
The command syntax is basically the same as for gcc.

> 4) If I link objects files produced with gcj together gcj also seems
>    to include all the unnecessary code (e.g., if I add an object that
>    is not used anywhere).  Is is a property of the linker in gcj, or
>    a general property of ld?

That's how ld works.  Any .o files you include get linked no matter
what.  If you want them to be conditionally linked, use an object
library.

-- 
Jeff Sturm
jsturm@sigma6.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]