2009-04-21 5 views
0

어셈블리 파일과 .o 파일 (start.o 및 main.o)로 컴파일 된 c 파일을 가지고 있으며이를 ld와 연결하려고합니다.ld가 c 파일을 찾을 수 없습니다.

가 link.ld는 링커 스크립트,하지만 난 그것을 실행할 때, 난이 오류가 얻을
ld -T link.ld -o kernel.bin start.o main.o 

: 어셈블리 파일에

start.o:start.o:(.text+0x2d): undefined reference to `_main' 

을, 나는 C를 호출 내가이 명령을 사용하고 있습니다 이 함수가있는 파일 :

stublet: 
extern _main 
call _main 

jmp $ 

아무 잘못 볼 수 있습니까?

+0

링커 스크립트 란 무엇입니까? – pjc50

+0

@ pjc50이 코드는 지금 작업중인 것과 같습니다. 기본 커널 개발에 대한 자습서. http://www.osdever.net/bkerndev/Docs/creatingmain.htm 관련 페이지를 참조하십시오. – Chris

답변

3

일부 컴파일러 (Linux 용 GCC)는 기본적으로 C 라이브러리 내보내기에 _을 추가하지 않습니다. 실제 참조 이름을 보려면 nm main.o을 시도하십시오. _main 대신 main 일 수 있습니다.

0

일부 링커는 개체 파일이나 라이브러리가 명령 줄에 나타나는 순서에 민감합니다. 두 개체 파일의 순서를 바꾸어보십시오.

C 표준은 main()이 함수라는 것을 보장하지 않는다는 것을 지적해야합니다. 사실 C 프로그램은 main을 명시 적으로 호출 할 수 없습니다.