Hi, On Fri, 20 Jan 2012 16:03:22 +0900 Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp> wrote: > > > > 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). I like it. good idea :-) Thanks Ken'ichi Ohmichi > 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