makedumpfile can't build on Fedora 16

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Fri Jan 20 02:03:22 EST 2012


Hi,

On Thu, 19 Jan 2012 16:58:16 +0900
Ken'ichi Ohmichi <oomichi at mxs.nes.nec.co.jp> wrote:

> 
> Hi,
> 
> On Wed, 18 Jan 2012 21:45:09 +0800
> Cong Wang <xiyou.wangcong at gmail.com> wrote:
> > >>> ...
> > >>> gcc -g -O2 -Wall -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
> > >>> -D_LARGEFILE64_SOURCE -DVERSION='"1.4.1"' -DRELEASE_DATE='"6 January
> > >>> 2012"' -D__x86_64__  print_info.o dwarf_info.o elf_info.o erase_info.o
> > >>> sadump_info.o arch/arm.o arch/x86.o arch/x86_64.o arch/ia64.o
> > >>> arch/ppc64.o arch/s390x.o -o makedumpfile makedumpfile.c -static -ldw
> > >>> -lbz2 -lebl -ldl -lelf -lz
> > >>
> > >> The parameter has -static, so you need libc.a, libdw.a and ...
> > >> Or you can remove -static, but you should ensure that there are these
> > >> dynamic librarys in the second os.
> > > 
> > > That's right.
> > > It has been written in README file of makedumpfile:
> > 
> > Hey,
> > 
> > This means we have to patch the source code by ourselves, why not
> > improve it? Something like below?
> 
> I guess someone will send "makedumpfile can't run on ..." even if
> your patch is merged, because these dynamic libraries should be
> included in the second os and it is easy to forget that.
> The compiling error is an easy way to notice it, I feel.
> What do you think, Kumagai-san ?
> 
> 
> Thanks
> Ken'ichi Ohmichi

Thank you for your explanation, Ohmichi-san, I agree with you.

I think that makedumpfile should be compiled with -static option,
because it must be executable in many environment as possible, e.g. even if
there are no dynamic libraries in 2nd kernel environment. (as written in README)

But I've got some requests to build it using dynamic libraries,
so I will change the Makefile as attached patch. 
 
If you want to build makedumpfile using dynamic libraries,
you need "LINKTYPE=dynamic"(see below).

How to build:
  a) linking static libraries (default)
    $ make
    ...
    $ ldd makedumpfile
        not a dynamic executable
  
  b) linking dynamic libraries
    $ make LINKTYPE=dynamic
    ...
    $ ldd makedumpfile
        libdw.so.1 => /usr/lib64/libdw.so.1 (0x0000003ca2800000)
        libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x000000394b200000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00000031a5a00000)
        libelf.so.1 => /usr/lib64/libelf.so.1 (0x0000003ca2400000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00000031a6200000)
        libc.so.6 => /lib64/libc.so.6 (0x00000031a5200000)
        /lib64/ld-linux-x86-64.so.2 (0x00000031a4e00000)

What do you think, Cong?

Thanks
Atsushi Kumagai


diff --git a/Makefile b/Makefile
index 9afbe1c..b14f09c 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,12 @@ OBJ_PART = print_info.o dwarf_info.o elf_info.o erase_info.o sadump_info.o
 SRC_ARCH = arch/arm.c arch/x86.c arch/x86_64.c arch/ia64.c arch/ppc64.c arch/s390x.c
 OBJ_ARCH = arch/arm.o arch/x86.o arch/x86_64.o arch/ia64.o arch/ppc64.o arch/s390x.o

+ifeq ($(LINKTYPE), dynamic)
+LIBS = -ldw -lbz2 -lebl -ldl -lelf -lz
+else
+LIBS = -static -ldw -lbz2 -lebl -ldl -lelf -lz
+endif
+
 all: makedumpfile

 $(OBJ_PART): $(SRC_PART)
@@ -38,7 +44,7 @@ $(OBJ_ARCH): $(SRC_ARCH)
        $(CC) $(CFLAGS_ARCH) -c -o ./$@ ./$(@:.o=.c)

 makedumpfile: $(SRC) $(OBJ_PART) $(OBJ_ARCH)
-       $(CC) $(CFLAGS) $(LDFLAGS) $(OBJ_PART) $(OBJ_ARCH) -o $@ $< -static -ldw -lbz2 -lebl -ldl -lelf -lz
+       $(CC) $(CFLAGS) $(LDFLAGS) $(OBJ_PART) $(OBJ_ARCH) -o $@ $< $(LIBS)
        echo .TH MAKEDUMPFILE 8 \"$(DATE)\" \"makedumpfile v$(VERSION)\" \"Linux System Administrator\'s Manual\" > temp.8
        grep -v "^.TH MAKEDUMPFILE 8" makedumpfile.8 >> temp.8
        mv temp.8 makedumpfile.8



More information about the kexec mailing list