편집 : 내 메이크 파일에 대한 링크 포함다른 개체 파일에 의존하는 개체 파일 빌드
다른 원본 파일에 정의 된 많은 기능을 호출하는 주 프로그램이 있습니다. 내가 functionHeader.hcc -c functionSource.c
를 사용하여 내 기능 중 하나가 다른 함수에 의존 할 때 내가하는 데 문제가
cc main.c func1.o func2.o .... -o test.o
내 주요 프로그램을 컴파일하기 전에 오브젝트 파일을 생성하고 있기 때문에 문제가되지 않습니다. 예 : 내 메인 프로그램은 자체 소스 파일에 정의 된 셔플 기능을 호출하고 셔플 기능은 자신의 소스 파일에 정의 된 스왑 기능을 호출합니다.
cc -c shuffle.o
을 사용하여 주 프로그램의 shuffle.o 파일을 생성하려고하면 undefined reference to swap
오류가 발생합니다.
cc shuffle.c swap.o
에 접속하려고 시도하면 undefined reference to main
오류가 발생합니다. 여기
내가이 고정 가야합니까 어떻게 내 makefile
입니까?
문제를 발견했습니다. insertSort.h 및 shuffle.h 내부에서 선언 된 스왑 함수는 있지만 구현은하지 않았습니다.
왜 컴파일러 줄에 헤더 파일을 포함시키고 있습니까?헤더 파일은'insertionSort.c' 파일의'#include "insertionSort.h"'에 의해 발견되어야합니다 (헤더가 같은 디렉토리에 있거나 올바른 경로 또는 경로 환경을 사용하는 경우). 또한,'swap'이'insertionSort.h'에서 선언 되었습니까? – lurker
아래의 내 대답을 참조하십시오. "undefined reference"는 '-c'를 지정하는 것을 잊어 버렸기 때문에 컴파일러가 링크를 시도합니다 (그리고 main이 누락되었습니다). 그렇지 않으면 기본적으로 실행 파일을 생성하는 방법이 있습니다. InsertionSort.o를 생성하고 연결에 사용하는 명령 줄에 추가하십시오. insertionSort.c를 컴파일 할 때 -c를 사용하면 (명령에 따라) .o 파일을 지정하는 것은 쓸모가 없습니다. –
스왑은 swap.h에서 선언되고 swap.c에서 구현되지 않습니다. swap.h는 insertionSort.c에 #include됩니다. 필자가 읽었던 makefile 튜토리얼은 컴파일러 라인에 나열된 모든 헤더 파일을 가지고 있으며 똑같이했다. –