This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Saturday 16 June 2012 00:35:27 Amittai Aviram wrote: > I have been writing a custom variant of glibc Version 2.14 that differs > primarily in malloc/malloc.c . My malloc.c has a function called > "init_globals" that initializes some global data structures, which opens > some files and pipes in the process. In order to make sure that these > pipes and files get closed when the process terminates, I have a > "clean_up" function to close them, and, at the end of "init_globals," I > have > > atexit(&clean_up); > > But, when I try to build this variant glibc, the linker reports "undefined > reference to 'atexit'": > > gcc -shared -static-libgcc -Wl,-O1 -Wl,-z,defs > -Wl,-dynamic-linker=/home/afa9/GLIBC/glibc_install/lib/ld-linux-x86-64.so. > 2 -B/home/afa9/GLIBC/glibc_obj/csu/ > -Wl,--version-script=/home/afa9/GLIBC/glibc_obj/libc.map > -Wl,-soname=libc.so.6 -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both > -nostdlib -nostartfiles -e __libc_main -L/home/afa9/GLIBC/glibc_obj > -L/home/afa9/GLIBC/glibc_obj/math -L/home/afa9/GLIBC/glibc_obj/elf > -L/home/afa9/GLIBC/glibc_obj/dlfcn -L/home/afa9/GLIBC/glibc_obj/nss > -L/home/afa9/GLIBC/glibc_obj/nis -L/home/afa9/GLIBC/glibc_obj/rt > -L/home/afa9/GLIBC/glibc_obj/resolv -L/home/afa9/GLIBC/glibc_obj/crypt > -L/home/afa9/GLIBC/glibc_obj/nptl > -Wl,-rpath-link=/home/afa9/GLIBC/glibc_obj:/home/afa9/GLIBC/glibc_obj/math > :/home/afa9/GLIBC/glibc_obj/elf:/home/afa9/GLIBC/glibc_obj/dlfcn:/home/afa9 > /GLIBC/glibc_obj/nss:/home/afa9/GLIBC/glibc_obj/nis:/home/afa9/GLIBC/glibc_ > obj/rt:/home/afa9/GLIBC/glibc_obj/resolv:/home/afa9/GLIBC/glibc_obj/crypt:/ > home/afa9/GLIBC/glibc_obj/nptl -o /home/afa9/GLIBC/glibc_obj/libc.so -T > /home/afa9/GLIBC/glibc_obj/shlib.lds > /home/afa9/GLIBC/glibc_obj/csu/abi-note.o > /home/afa9/GLIBC/glibc_obj/elf/soinit.os > /home/afa9/GLIBC/glibc_obj/libc_pic.os > /home/afa9/GLIBC/glibc_obj/elf/sofini.os > /home/afa9/GLIBC/glibc_obj/elf/interp.os > /home/afa9/GLIBC/glibc_obj/elf/ld.so -lgcc > /home/afa9/GLIBC/glibc_obj/libc_pic.os: In function `init_globals': > /home/afa9/GLIBC/glibc/malloc/malloc.c:5186: undefined reference to > `atexit' collect2: ld returned 1 exit status > > My malloc.c definitely #includes <stdlib.h>. Why doesn't the linker > recognize "atexit"? Thanks! because in the x86-64 port, atexit isn't provided by the C library. it's in libc_nonshared.a which means the symbol ends up in the final application, not in the libc.so. so you may not use atexit() inside of the C library. malloc (and friends) are designed to be overridden at runtime. create a shared library that exports those symbols and simply LD_PRELOAD it and those funcs will be called whenever memory is needed. why do you need to rebuild glibc to do what you want ? -mike
Attachment:
signature.asc
Description: This is a digitally signed message part.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |