[patch] bug #5412: Compile failing with 'Undefined symbols: "_environ"

Andrew Tanner andrew.tanner at isilon.com
Sun Jul 6 00:12:34 GMT 2008

Hi Samba team,

This patch fixes a bug I filed a while back (https://bugzilla.samba.org/show_bug.cgi?id=5412 
) that is causing the latest v4-0-test/stable heimdal (and perhaps  
other branches?) to fail to compile on OSX. Here is the explanation  
from the Mac OSX Man Page for environ(7) as to why environ can't be  
accessed directly.

      Programs can query and modify the environment, using the  
environment rou-tines routines
      tines getenv(3), putenv(3), setenv(3) and unsetenv(3).  Direct  
access can
      be made through the global variable environ, though it is  
      that changes to the enviroment still be made through the  
environment rou-tines. routines.

      Shared libraries and bundles don't have direct access to  
environ, which
      is only available to the loader ld(1) when a complete program is  
      linked.  The environment routines can still be used, but if  
direct access
      to environ is needed, the _NSGetEnviron() routine, defined in
      <crt_externs.h>, can be used to retrieve the address of environ  
at run-time. runtime.

diff --git a/source/heimdal/lib/roken/roken.h.in b/source/heimdal/lib/ 
index 82473d7..a3408f2 100644
--- a/source/heimdal/lib/roken/roken.h.in
+++ b/source/heimdal/lib/roken/roken.h.in
@@ -445,8 +445,13 @@ extern int opterr;

+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
  extern char **environ;


More information about the samba-technical mailing list