gcc compilier에서 obj 파일 ctr1.o는 무엇을합니까? 실행 파일이 생성 될 때마다 링커가이 obj 파일을 링크하는 이유는 무엇입니까?gcc 컴파일러에서 ctr1.o의 오브젝트 코드 파일은 무엇을합니까?
답변
나는 ... 여기에 몇 가지 설명과 함께 link입니다 그것은 당신의 주요 기능 등을 위해 ARGV 및 ARGC을 설정하는 등의 아주 기본적인 STUF을 (CRT는 C 런타임의 약자)를 포함 생각
원하지 않는 경우 예를 들어 작은 부트 로더를 작성하고 있기 때문에 libc를 조금도 사용하지 않고 --no-stdlib 옵션을 사용하여 프로그램을 링크 할 수 있습니다. 이 방법을 사용하면 자신의 링커 스크립트를 작성해야합니다.
오브젝트 파일은 컴파일 된 코드를 보유하지만 실행 파일 자체는 아닙니다. 링커에서는 프로그램을 구성하는 모든 오브젝트 파일을 가져 와서 전체에 결합시키는 작업을 수행합니다. 여기에는 객체 파일 (extern
심볼) 사이의 참조를 확인하고 main()
엔트리 포인트 (C 프로그램의 경우) 등이 있는지 확인하는 작업이 포함됩니다.
각 소스 파일 (.c 또는 .cpp)은 별도의 오브젝트 파일로 컴파일되므로 링커에서 읽을 수 있으므로 하나의 C 파일 만 변경하면 다시 컴파일되어 새로운 오브젝트 파일이 생성됩니다. 이 파일은 기존 오브젝트 파일과 새로운 실행 파일로 링크됩니다. 이로 인해 개발 시간이 단축됩니다.
UPDATE : 다른 답변에서 언급 한 것처럼, "crt.o"오브젝트 파일은 대부분의 C 프로그램이 필요한 것으로 가정하는 C R 않은 t IME 코드를 보유하고. gcc linker options을 읽고 --no-stdlib
옵션을 찾을 수 있습니다. gcc에 특정 프로그램이 표준 C 런타임 파일과 연결되어서는 안됨을 알립니다.
질문을 이해할 수 없지만 GCC 패키지에서 'crt1.o'를 언급 한 것 같습니다.
crt는 컴퓨터에 액세스하기위한 기본 기능을 제공하는 libc의 기본 패키지 중 하나입니다. IIRC에는 'printf'와 같은 메소드가 포함되어 있습니다.
그래서 가장 기본적인 C 응용 프로그램에 포함되는 경우가 있습니다.
crt0.o에는 printf가 포함되어 있지 않습니다. printf는 일반적으로 libc.a에 있습니다. –
경고 : GCC 4.1.2 – psihodelia
의 -nostdlib 옵션, @shodanex, misprint 'stuf' –