Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Feb 2000 09:03:06 -0800 (PST)
From:      John Polstra <jdp@polstra.com>
To:        marcov@stack.nl
Cc:        hackers@freebsd.org
Subject:   Re: how to compile without libc (so not static)
Message-ID:  <200002071703.JAA70677@vashon.polstra.com>
In-Reply-To: <20000204161324.B2DE396D7@toad.stack.nl>
References:  <20000204161324.B2DE396D7@toad.stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
In article <20000204161324.B2DE396D7@toad.stack.nl>,
Marco van de Voort <marcov@stack.nl> wrote:
> 
> I finished the syscalls, so now I moved on the initialisation code.
> 
> To test that I try to create an empty binary, which doesn't link to libc:
> 
> I've put in an hour effort, and wrote the following C file:
> 
> int main (void) {
>  return 0;
> }
> 
> gcc -nostdlib empty.c /usr/lib/crti.o /usr/lib/crt0.o -o empty
> 
> results in:
> 
> /usr/lib/crt1.o: In function `_start':
> /usr/lib/crt1.o(.text+0x4f): undefined reference to `atexit'
> /usr/lib/crt1.o(.text+0x5c): undefined reference to `atexit'
> /usr/lib/crt1.o(.text+0x6f): undefined reference to `exit'

I suspect that "gcc" isn't the standard FreeBSD C compiler in your
case.  Try "which gcc" and find out.  It works fine for me on both
-stable and -current with "cc":


blake$ cc -v -nostdlib hello.c
Using builtin specs.
gcc version 2.95.2 19991024 (release)
 /usr/libexec/cpp -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=95 -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=400004 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=400004 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ hello.c /tmp/cciRD216.i
GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/include/g++
End of omitted list.
 /usr/libexec/cc1 /tmp/cciRD216.i -quiet -dumpbase hello.c -version -o /tmp/ccbyU216.s
GNU C version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release).
 /usr/libexec/elf/as -v -o /tmp/ccWvs216.o /tmp/ccbyU216.s
GNU assembler version 2.9.1 (i386-unknown-freebsdelf), using BFD version 2.9.1
 /usr/libexec/elf/ld -m elf_i386 -dynamic-linker /usr/libexec/ld-elf.so.1 -L/usr/libexec/elf -L/usr/libexec -L/usr/lib /tmp/ccWvs216.o
/usr/libexec/elf/ld: warning: cannot find entry symbol _start; defaulting to 08048074
/tmp/ccWvs216.o: In function `main':
/tmp/ccWvs216.o(.text+0xf): undefined reference to `printf'

John
-- 
  John Polstra                                               jdp@polstra.com
  John D. Polstra & Co., Inc.                        Seattle, Washington USA
  "Disappointment is a good sign of basic intelligence."  -- Chögyam Trungpa



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?200002071703.JAA70677>