Date: Sun, 18 Apr 1999 03:53:42 -0500 From: Jacques Vidrine <n@nectar.com> To: hackers@freebsd.org Subject: __attribute__ ((constructor)) functions & shared libs Message-ID: <199904180853.DAA22110@spawn.nectar.com>
next in thread | raw e-mail | index | archive | help
Hi all, I'm porting an application that uses ``__attribute__ ((constructor))'' to give shared libraries initialization functions. Unfortunately, it seems that environ is not yet initialized when these functions are called. A brief example: libfoo.so has init function ``libfoo_init'' which looks like this: extern char **environ; void libfoo_init(void) __attribute__ ((constructor)); void libfoo_init(void) { fprintf(stderr, "getenv(\"HOME\") = \"%s\"\n", getenv("HOME")); fprintf(stderr, "environ = %p\n", environ); } An application linked with this library will display: getenv("HOME") = "(null)" environ = 0x0 even though HOME is, of course, set in the environment. What might I be missing? Looking at src/lib/csu/i386-elf/crt1.c, it seems as if environ is set before invoking the run time linker. Jacques Vidrine / n@nectar.com / nectar@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904180853.DAA22110>