ld로 링크시 오류가 나네요.
글쓴이: Reper / 작성시간: 토, 2015/07/18 - 11:40오후
시그윈을 통해서 밑과 같은 c 소스코드를 gcc로 컴파일 하였습니다.
/* exam_c1.c */ void func(); int main() { func(); } void func() { }
그리고 Makefile에는 밑과 같은 내용이 있으며
CC = gcc all : example example : exam_c1.o ld -m i386pe -o exam_c1 -Ttext 0x00 -e _main exam_c1.o exam_c1.o : exam_c1.c CC -c -m32 exam_c1.c clean: rm *.o
make 명령어를 사용하니 다음과 같은 오류가 나네요...
exam_c1.o:exam_c1.c:(.text+0x7): undefined reference to `__main'
아무리 구글링을 해도 해결책이 보이질 않는데 .. 어떤 점이 문제일까요 ..
오브젝트 파일을 objdump로 덤프한 결과는 밑과 같습니다 .. 제 생각은 파일 포맷때문에 그런것 같네요 ..
exam_c1.o: file format pe-i386 Disassembly of section .text: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: e8 02 00 00 00 call 12 <_func> 10: c9 leave 11: c3 ret 00000012 <_func>: 12: 55 push %ebp 13: 89 e5 mov %esp,%ebp 15: 5d pop %ebp 16: c3 ret 17: 90 nop Disassembly of section .rdata$zzz: 00000000 <.rdata$zzz>: 0: 47 inc %edi 1: 43 inc %ebx 2: 43 inc %ebx 3: 3a 20 cmp (%eax),%ah 5: 28 47 4e sub %al,0x4e(%edi) 8: 55 push %ebp 9: 29 20 sub %esp,(%eax) b: 34 2e xor $0x2e,%al d: 39 2e cmp %ebp,(%esi) f: 33 00 xor (%eax),%eax 11: 00 00 add %al,(%eax) ...
그리고 gcc를 사용하여 윈도우즈 운영체제 위에서 pe-i386 파일포맷 대신 coff형식의 파일 포맷은 생성 불가능한가요 ?
gcc가 -gcoff 옵션을 지원하는 것도 확인했고 -gcoff 옵션을 주고 컴파일 했는데도 pe-i386형식으로 오브젝트 파일이 생성되네요 ..
Forums:
댓글 달기