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 *.omake 명령어를 사용하니 다음과 같은 오류가 나네요...
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:


댓글 달기