gcc에서 -nostdlib 옵션시 _start 심볼을 못찾는 에러가 나네요?
글쓴이: brian.ryu / 작성시간: 목, 2005/10/27 - 1:11오전
glibc-2.3.2를 컴파일해서 /usr/local/glibc2에 make install했습니다.
간단히 hello.c 파일을 만들고 실헙해보았습니다.
gcc -v -nostdinc -I/usr/local/glibc2/include -I/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include -nostdlib -L/usr/local/glibc2/lib hello.c -Wall
표준 C 헤더파일도 표준 C 라이브러리도 사용하지 않고, 새로이 컴파일 완료한 헤더 파일과 라이브러리 링크 시켰습니다.
결과
[root@atlas TEST]# gcc -v -nostdinc -I/usr/local/glibc2/include -I/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include -nostdlib -L/usr/local/glibc2/lib hello.c -Wall Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux Thread model: posix gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/cc1 -lang-c -nostdinc -v -I/usr/local/glibc2/include -I/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ hello.c -quiet -dumpbase hello.c -Wall -version -o /tmp/ccXG1Obk.s GNU CPP version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) (cpplib) (i386 Linux/ELF) GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) (i386-redhat-linux) compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5). #include "..." search starts here: #include <...> search starts here: /usr/local/glibc2/include /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include End of search list. as -V -Qy -o /tmp/cc8f4FVv.o /tmp/ccXG1Obk.s GNU assembler version 2.13.90.0.18 (i386-redhat-linux) using BFD version 2.13.90.0.18 20030206 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -L/usr/local/glibc2/lib -L/usr/lib/gcc-lib/i386-redhat-linux/3.2.2 -L/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../.. /tmp/cc8f4FVv.o /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 08048074 /tmp/cc8f4FVv.o(.text+0x19): In function `main': : undefined reference to `printf' collect2: ld returned 1 exit status
위의 결과가 나옵니다./usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 08048074
즉, main() 이전에 실행되는 _start 심볼은 어떤 gcc 옵션을 또는 다른 행동을 해야될까요?
또한, undefined reference to `printf'
위에 printf()에 관한 헤더파일은 /usr/local/glibc2/include 에 stdio.h 가 있어서 헤더파일을 연결했으나 링킹 중 참조 라이브러리가 /usr/local/glibc2/lib 에 없는 모양입니다.
어떻게 해야할까요?
Forums:
댓글 달기