2012-09-02 2 views
3

이 내 메이크입니다 :정의되지 않은 참조 SDL_합니다 * 많은 *

EventHandler.cpp:17: undefined reference to `SDL_PollEvent' 
Pantalla.o: In function `Pantalla::initialize(int, int, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': 
Pantalla.cpp:6: undefined reference to `SDL_Init' 
Pantalla.cpp:9: undefined reference to `SDL_SetVideoMode' 
Pantalla.cpp:14: undefined reference to `SDL_WM_SetCaption' 

및 다른 많은 오류를 : 내가 컴파일 할 때

CFLAGS = -Wall -pedantic -pedantic-errors -g -lSDL -lSDL_image 
CC = g++ 
OBJ = Point.o Personaje.o Juego.o EventHandler.o 

all: main 

#%.o: %.cpp %.h 
# $(CC) -c $(CFLAGS) $< 

bin: other $(OBJ) 

Point.o: Point.cpp Point.h 
    $(CC) -c $(CFLAGS) $< 

Personaje.o: Personaje.cpp Personaje.h 
    $(CC) -c $(CFLAGS) $< 

Juego.o: Juego.cpp Juego.h 
    $(CC) -c $(CFLAGS) $< 

EventHandler.o: EventHandler.cpp EventHandler.h 
    $(CC) -c $(CFLAGS) $< 

main: $(OBJ) 
    cd ../vista/; make 
    cp ../vista/*.o . 
    rm ../vista/*.o 
    g++ $(CFLAGS) $(OBJ) Pantalla.o Imagen.o main.cpp -o main 

clean: 
    rm *.o; 
    rm main 

PHONY: main 

나는 다음과 같은 오류를 얻을 "확인".

"Pantalla.h"의 헤더

이 라인을 포함

#include "SDL/SDL.h" 

을 그리고 난 이미 SDL 패키지를 설치했습니다.

내가 뭘 잘못하고 있는지 알지 못해 ... 도와주세요!

+0

아래 답변 중 하나를 올바른 것으로 표시했는지 확인하십시오. 5 시간이 지났고 답 중 하나 근처에있는 "체크 상자"를 클릭해야합니다. –

답변

4
CFLAGS = -Wall -pedantic -pedantic-errors -g -lSDL -lSDL_image 

이것은 좋지 않습니다. 컴파일러 플래그 (경고 및 디버그)와 링커 정보 (링크해야하는 라이브러리)가 혼합되어 있습니다. 그 두 개의 별도의 변수를 사용 : (당신이 .o 파일을 생성 할 때, 즉를하지만 연결하지 않음)

CFLAGS = -Wall -pedantic -pedantic-errors -g 
LIBS = -lSDL -lSDL_image 

는 그런 다음 컴파일 할 때, (당신이 지금 가지고있는 것처럼)에만 $(CFLAGS)를 사용합니다. 그러나 링크를 수행하면 (최종 실행 파일을 생성하기 위해) 링커 지시문을 추가하십시오.

g++ $(CFLAGS) -o main main.cpp $(OBJ) Pantalla.o Imagen.o $(LIBS) 

당신 중요 귀하의 개체 및 라이브러리를 넣어 순서.

+0

고마워요! 이것은 잘 작동합니다 :) –

2

하나의 문제는 컴파일 및 연결에 정확히 동일한 플래그를 사용하고 있다는 것입니다. 컴파일러는 라이브러리를 사용하지 않습니다. 링커는 pedantic에 대해 알지 못합니다.

더 큰 문제는 -lSDL -lSDL_image이 링크 명령에서 너무 일찍 나타납니다. g++ $(CFLAGS) $(OBJ) Pantalla.o Imagen.o main.cpp -o main입니다. 링커는 libSDL.a 또는 libSDL_image.a (또는 해당 항목)을 조사하지 않습니다. 검색을 지정한 지점에 해결되지 않은 외부 참조가 없기 때문입니다. -lSDL -lSDL_image 옵션을 -o 옵션 바로 앞에 추가하십시오.

+0

감사합니다! 이 작품! –