static linkage...

Andreas Boerner andreas.boerner at w84u.org
Tue Dec 16 19:34:42 UTC 2003


see my comments/questions/answers between the lines...


On Tue, 16 Dec 2003 01:42:26 -0500 (EST)
Pavel Roskin <proski at gnu.org> wrote:

> On Mon, 15 Dec 2003, Andreas Boerner wrote:
> 
> > Problem: I need the mc on a system to be installed, where the (shared)
> > libraries are (yet) missing; so I need a statically linked mc.
> >
> > I suggest to to add an option for the ./configure to allow static linkage.
> >
> > Doing this manually is time consuming and needed several repairs:
> 
> Maybe we should make those repairs rather that introduce one more option?
> 
> > (gentoo linux; system is up to date (Dec, 15th, 2003))
> 
> Debian unstable: glib 2.2.3, Autoconf 2.58.  I'm using Automake 1.8
> installed in /usr/local.

gentoo:

autoconf: 2.13
automake 1.7.5
glib: 2.2.3

these are the most up-to-date; gentoo doesn't provide newer versions; I guess they are considered to be unstable...

> 
> > setting environment variable LDFLAGS to -Wl,-static
> 
> It's better to set variable on the command line:
> ./configure LDFLAGS="-Wl,-static"
> 

I didn't know this; where is that documented? I searched the web for about half an hour but didn't find details on how to statically link mc.
And doing it that way doesn't change anything. Why is that better?


> > compile error: library glib-2.0 not found
> 
> Works for me, even if I use the environment:
> 
> checking for pkg-config... /usr/bin/pkg-config
> checking for glib-2.0... yes
> checking GLIB_CFLAGS... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
> checking GLIB_LIBS... -lglib-2.0
> 

my output is identical!

checking for pkg-config... /usr/bin/pkg-config
checking for glib-2.0... yes
checking GLIB_CFLAGS... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  
checking GLIB_LIBS... -lglib-2.0  



> Since the error is on your side, you should post details, not me.  Check
> config.log for relevant error messages.

in the attachment you find the details;
output of configure is in conf.log
output of make is in make.log

> 
> > changing within the link command glib-2.0 to glib solved it.
> 
> I think you have libglib.a but not libglib-2.0.a.  The problem is either
> in the gentoo package or in pkg-config or in glib.m4.  It depends on who
> misunderstood whose intentions.  You may want to research this question or
> at least file a bug with gentoo.  Even if problem is elsewhere, another
> distibution (Debian) made the static library compatible with pkg-config
> and glib.m4, and so should gentoo.
> 

the gentoo distribution does not provide the option of static linkage at all;
so I had to download the sources by myself and build it manually without the
package-support of gentoo.

I guess the developer from gentoo who wrote the install script for mc did not knew about the way how to compile mc statically. Since there is no configure option for that it is hard to guess...

> > gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -O2 -Wall
> > -Wl,-static -o mc achown.o background.o boxes.o chmod.o chown.o cmd.o
> > color.o command.o complete.o cons.handler.o dialog.o dir.o dlg.o ext.o
> > file.o filegui.o filenot.o fileopctx.o find.o findme.o fsusage.o help.o
> > hotlist.o info.o key.o keyxdef.o layout.o learn.o listmode.o main.o
> > menu.o mountlist.o mouse.o option.o panelize.o popt.o poptconfig.o
> > popthelp.o poptparse.o profile.o regex.o rxvt.o screen.o setup.o slint.o
> > subshell.o terms.o text.o textconf.o tree.o treestore.o user.o util.o
> > utilunix.o view.o widget.o win.o wtools.o ../edit/libedit.a
> > ../vfs/libvfs-mc.a -lglib-2.0 -lgpm -lslang -lext2fs -lcom_err
> >
> > some thread references were missing...
> >
> > was solved by specifying ./configure --without-x ??
> 
> Actually, the error messages would be more interesting than the command
> line.  I have no idea if those messages are related to static linking.
> 
> I could not reproduce this problem.
> 

I don't want to follow this path, since I made manual modifications. Maybe the tread_...
references are contained in glib-2.0, but not in glib ?? Or, more probable, some X-libraries contain thread references, since the error does not occur with --without-x

> > With these modifications I was able to build mc statically by sending
> > the modified link command isolated to the shell.
> >
> > I suggest to be able to do:
> >
> > ./configure --static
> 
> That would be equivalent to what you did initially:
> ./configure LDFLAGS="-Wl,-static"
> 
> Adding an option doesn't automatically solve any problems with the
> functionality it stands for.
> 

Technically speaking, that is true. But I disagree anyway: If there would be such an option, it is more obvious for install script writers (of the distributions) to support this option. I think you could imagine thousand more flag settings, but who knows, which are senseful and is going to test them.
Static linkage in contrast isn't that fancy. 

My summary: A configure option --static is more user friendly; it is more likely to be tested and corrected, if it doesn't work. 

last question: To who should I send a bug report?
(I think, that if the gentoo distribution decides, that they do not want to support static linkage, then I should still be able to link it manually without getting errors. I think that the least thing to expect is, that everything that mc needs (to link statically), should be checked by the configure script, and be reported by an meaningful error message!)

> -- 
> Regards,
> Pavel Roskin

regards,
 -- Andreas


-------------- next part --------------
A non-text attachment was scrubbed...
Name: config.log
Type: text/x-log
Size: 169419 bytes
Desc: not available
URL: <http://lists.midnight-commander.org/pipermail/mc/attachments/20031216/ae004c57/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: make.log
Type: text/x-log
Size: 2537 bytes
Desc: not available
URL: <http://lists.midnight-commander.org/pipermail/mc/attachments/20031216/ae004c57/attachment-0001.bin>


More information about the mc mailing list