title: Make standalone curl leads to segfault
body: <p>I would like to build a standalone version of `curl without any library dependency (even libc) for an embedded system with a very old libc version.</p>
  
  <p>From current curl github, I configure the compilation with this command:</p>
  
  <pre><code>./configure --disable-shared --enable-static-nss --prefix=/tmp/curl LDFLAGS='-static -static-libgcc -Wl,-Bstatic -lc' LIBS='-lc -lssl -lcrypto -lz -ldl'
  [...]
  curl version:     7.50.2-DEV
    Host setup:       x86_64-pc-linux-gnu
    Install prefix:   /tmp/curl
    Compiler:         gcc
    SSL support:      enabled (OpenSSL)
    SSH support:      no      (--with-libssh2)
    zlib support:     enabled
    GSS-API support:  no      (--with-gssapi)
    TLS-SRP support:  enabled
    resolver:         default (--enable-ares / --enable-threaded-resolver)
    IPv6 support:     enabled
    Unix sockets support: enabled
    IDN support:      no      (--with-{libidn,winidn})
    Build libcurl:    Shared=no, Static=yes
    Built-in manual:  enabled
    --libcurl option: enabled (--disable-libcurl-option)
    Verbose errors:   enabled (--disable-verbose)
    SSPI support:     no      (--enable-sspi)
    ca cert bundle:   /etc/ssl/certs/ca-certificates.crt
    ca cert path:     no
    ca fallback:      no
    LDAP support:     no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
    LDAPS support:    no      (--enable-ldaps)
    RTSP support:     enabled
    RTMP support:     no      (--with-librtmp)
    metalink support: no      (--with-libmetalink)
    PSL support:      no      (libpsl not found)
    HTTP2 support:    disabled (--with-nghttp2)
    Protocols:        DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
  </code></pre>
  
  <p>Then during the <code>make</code> phase, I get the following warnings:</p>
  
  <pre><code>curl-tool_homedir.o: In function `homedir':
  tool_homedir.c:(.text+0x60): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
  ../lib/.libs/libcurl.a(libcurl_la-netrc.o): In function `Curl_parsenetrc':
  netrc.c:(.text+0x3c3): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
  ../lib/.libs/libcurl.a(libcurl_la-curl_addrinfo.o): In function `Curl_getaddrinfo_ex':
  curl_addrinfo.c:(.text+0x73): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
  /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
  (.text+0x4e6): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
  </code></pre>
  
  <p>I can continue and perform the <code>make install</code> to get the final binary.</p>
  
  <p>The binary has no dependency:</p>
  
  <pre><code>$ ldd /tmp/curl/bin/curl
      not a dynamic executable
  $ nm /tmp/curl/bin/curl | grep " U "
  $ 
  </code></pre>
  
  <p>But the binary is not working at all:</p>
  
  <pre><code>$ /tmp/curl/bin/curl -version
  Segmentation fault (core dumped)
  </code></pre>
  
  <p>Do you have any idea of the root cause issue?</p>
  
  <p><strong>EDIT 1:</strong>
  GDB output:</p>
  
  <pre><code>(gdb) run
  Starting program: /tmp/curl/bin/curl 
  
  Program received signal SIGSEGV, Segmentation fault.
  0x0000000000000000 in ?? ()
  </code></pre>
  
  <p><strong>EDIT 2:</strong></p>
  
  <pre><code>$ nm /tmp/curl/bin/curl | grep getpwuid
  0000000000655770 T getpwuid
  00000000006558f0 T __getpwuid_r
  00000000006558f0 W getpwuid_r
  00000000006558f0 T __new_getpwuid_r
  0000000000663cf0 T __nscd_getpwuid_r
  </code></pre>
  
  <p>Maybe the issue comes from <code>W</code>:</p>
  
  <blockquote>
    <p>W The symbol is a weak symbol that has not been specifically tagged as
    a weak object symbol. When a weak defined symbol is linked with a
    normal defined symbol, the normal defined symbol is used with no
    error. When a weak undefined symbol is linked and the symbol is not
    defined, the value of the weak symbol becomes zero with no error.</p>
  </blockquote>
  
  <p><strong>EDIT 3:</strong>
  If I remove the SSL linking I got the same warning for <code>getpwuid</code> but the binary is working:</p>
  
  <pre><code>./configure --disable-shared --enable-static-nss --prefix=/tmp/curl LDFLAGS='-static -static-libgcc -Wl,-Bstatic,-lc'
  
  ldd /tmp/curl/bin/curl
      not a dynamic executable
   /tmp/curl/bin/curl --version
  curl 7.50.2-DEV (x86_64-pc-linux-gnu) libcurl/7.50.2-DEV zlib/1.2.8
  Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp 
  Features: IPv6 Largefile libz UnixSockets 
  
   nm /tmp/curl/bin/curl | grep getpwuid
  00000000004f52d0 T getpwuid
  00000000004f5450 T __getpwuid_r
  00000000004f5450 W getpwuid_r
  00000000004f5450 T __new_getpwuid_r
  0000000000502cd0 T __nscd_getpwuid_r
  </code></pre>
  
  <p>But I need to add SSL for HTTPS support so the issue is still open.</p>
  
  <p><strong>EDIT 4:</strong>
  The issue is directly linked to <code>nss</code>. Strange point is that <code>./configure --prefix=/tmp/curl --disable-shared --enable-static-nss LDFLAGS='-static -static-libgcc -Wl,-Bstatic' LIBS='-ls'</code> produces a working standalone executable but without SSL.
  The <code>nss</code> issues is due to the SSL linking.</p>