2017-02-08 17 views
0

완벽하게 작동하는 MingW와 cmake를 사용하여 FLTK (v. 1.3.4.1)를 다운로드하고 빌드했습니다. 그러나 연결하는 동안 정의되지 않은 참조를 많이 발생시키는 FLTK에 대해 올바르게 연결하는 데 문제가 있습니다. MSYS 나 다른 Windows 용 셸이 없으므로 'fltk-config'스크립트를 사용하는 것이 옵션이 아닙니다.MingW와 makefile을 사용할 때 라이브러리와 링크하는 방법

메이크 파일에 대한 지식이 부족하며 공식 문서와 다양한 인터넷 소스를 사용하여 다음 내용을 작성했습니다.

CC=g++ 
FLTK_INC=C:/frameworks/fltk-1.3.4-1 
FLTK_BIN=C:/frameworks/fltk-1.3.4-1/bin 
CFLAGS=-std=c++11 -Wall -I$(FLTK_INC) -v 
LDFLAGS=-L$(FLTK_BIN)/lib 
LDLIBS=-lfltk 
EXT=cc 
SOURCES=$(wildcard src/*.$(EXT)) 
OBJECTS=$(SOURCES:.$(EXT)=.o) 
EXECUTABLE=hello 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.$(EXT).o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

분명히이 makefile에 문제가 있습니까? 아니면 다른 곳에서 오류가 있습니까?

답변

0

이 메이크 파일에 명백하게 잘못된 점이 있습니까? 아니면 다른 곳에서도 오류가 있습니까?

이 메이크 파일에는 두 가지 문제가 있습니다.

것 1

LDFLAGS=-L$(FLTK_BIN)/lib 
LDLIBS=-lfltk 

당신은 기존의 GNU가 연결 옵션의 설정을 확인해야 :

LDFLAGS=-L$(FLTK_BIN)/lib 

$(LDFLAGS)이 연결 조리법에 적절한 위치에서 발생한다

가 그 링커에게 -l 옵션 (bef)으로 지정된 라이브러리는 $(FLTK_BIN)/lib 디렉토리에서 검색해야합니다. ore 기본 디렉토리에서 검색).

LDLIBS=-lfltk 

$(LDLIBS)는 공유 라이브러리 libfltk.so 또는 실패, 정적 라이브러리 libfltk.a를 연결해야 링커에게 당신의 연결 조리법에 적절한 위치에서 발생한다. (Windows에서는 다른 확장자 이 허용됩니다.)

귀하의 연계 조리법 :

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

가 적절한 위치에 $(LDFLAGS)을 가지고 있지만 어디 $(LDLIBS) 이 없습니다. 따라서 링커는 libfltk을 연결하지 않습니다. 당신이 참조한 정의되지 않은 참조 오류 인, 을 설명 할 가능성이 매우 높습니다. 사용자가 자신의 정보를 공개하지 않았기 때문에 절대 확신 할 수는 없습니다.더 종래

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] $(LDLIBS) 

나 :

링키지 조리법되어야한다

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $^ -o [email protected] $(LDLIBS) 

것 2

귀하의 컴파일 조리법 :

.$(EXT).o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

은 실제로 컴파일 방법이 아닙니다. 이것은 컴파일 및 링크 방법입니다. gcc/g++ 은 명령 줄 옵션 에 -c (= 컴파일 전용)이 포함되어 있지 않으면 항상 연결을 시도합니다. 레서피 (정확하게)에는 필요한 연결 옵션 ($(LDFLAGS), $(LDLIBS))이 포함되어 있지 않으므로 조기 시도가 실패하고 빌드가 더 이상되지 않습니다. 당신이 연결 오류 발생으로 로그인 한 명령 행 : 당신의 연결 조리법의

$(CC) $(CFLAGS) $< -o [email protected] 

하지 :

$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

g++ -std=c++14 -Wall -IC:/frameworks/fltk-1.3.4-1 -v src/hw.cc -o src/hw.o 

은 대체 당신의 "컴파일"조리법의 인스턴스

컴파일 방법을 수정하려면 다음과 같이하십시오.

$(CC) $(CFLAGS) $< -c -o [email protected] 

The GNU Make documentation 이 좋습니다.

+0

현명한 조언을 따르지만 오류는 여전히 많습니다. 참조하십시오 [link] (http://pastebin.com/2tr3CuRg) –

+0

@slimandstacked 오류가 아니라 실패한 전체 출력을 게시하십시오. –

+0

[로그] (http://pastebin.com/xr8GjcX6) –