2017-12-12 42 views
0

this tutorial에 대한 opengl 프로젝트를 만들려고하는데 프로그램을 컴파일 할 수 없습니다.glfw3에서 정의되지 않은 참조를 윈도우에서 g ++ 사용

여기서의 현재 문제는 모든 glfw 함수는 정의되지 않지만 glfw3.h에 존재한다는 점입니다.

glfw3 파일은 the glfw download page (x64 버전)입니다.

make 
=== SRC === 
src/glad.c src/main.cpp 
=== OBJ === 
bin/glad.o bin/main.o 
===== Creating file bin/glad.o === 
C:/cygnus/cygwin-b20/H-i586-cygwin32/bin/mkdir -p bin/ 
C:/MinGW/bin/g++ -I./include -o bin/glad.o -c src/glad.c 
===== Creating file bin/main.o === 
C:/cygnus/cygwin-b20/H-i586-cygwin32/bin/mkdir -p bin/ 
C:/MinGW/bin/g++ -I./include -o bin/main.o -c src/main.cpp 
C:/MinGW/bin/g++ -L./libs -o build/program.exe bin/glad.o bin/main.o -lglfw3 
bin/main.o:main.cpp:(.text+0xc): undefined reference to `glfwInit' 
collect2.exe: error: ld returned 1 exit status 
make: *** [program.exe] Erreur 1 

나는 다음과 같은 MAIN.CPP 파일을 사용하고 있습니다 :

#include <glad/glad.h> 
#include <GLFW/glfw3.h> 

#include <iostream> 

int main(int argc, char** argv){ 

    glfwInit(); 

    return 0; 
} 

을 그리고 다음 메이크 : 여기

은 로그의 복사본입니다

CXX = C:/MinGW/bin/g++ 
FAKEPATH = C:/cygnus/cygwin-b20/H-i586-cygwin32/bin/ 

CXXFLAGS = -W -Wall -ansi -Wno-deprecated 
LDLIBS = -lglfw3 

TARGET = program.exe 

LIB_DIR = -L./libs 
INC_DIR = -I./include 

SRC = $(shell $(FAKEPATH)find src/ -type f \(-iname \*.cpp -o -iname \*.c \)) 
OBJ = $(patsubst src/%,bin/%,$(addsuffix .o, $(basename $(SRC)))) 


all: directories $(TARGET) 

test: 
    echo $(FAKEPATHEXISTS) 

directories: 
    @$(FAKEPATH)echo === SRC === 
    @$(FAKEPATH)echo $(SRC) 
    @$(FAKEPATH)echo === OBJ === 
    @$(FAKEPATH)echo $(OBJ) 
    @$(FAKEPATH)mkdir -p bin 
    @$(FAKEPATH)mkdir -p build 

compileAndRun: all 
    build/$(TARGET) 

$(TARGET): $(OBJ) 
    $(CXX) $(LDFLAGS) $(LIB_DIR) -o build/[email protected] $^ $(LDLIBS) 

bin/%.o: src/%.c 
    @$(FAKEPATH)echo ===== Creating file [email protected] === 
    $(FAKEPATH)mkdir -p $(dir [email protected]) 
    $(CXX) $(INC_DIR) -o [email protected] -c $< 

bin/%.o: src/%.cpp 
    @$(FAKEPATH)echo ===== Creating file [email protected] === 
    $(FAKEPATH)mkdir -p $(dir [email protected]) 
    $(CXX) $(INC_DIR) -o [email protected] -c $< 

clean: 
    @$(FAKEPATH)rm -rf bin/ 

cleaner: clean 
    @$(FAKEPATH)rm -rf build/ 

그리고 마지막으로 내 파일은 다음과 같이 정렬됩니다.

files

gG ++에는 MinGW를, Linux 명령에는 cygwin을 사용하고 있습니다.

도움이나 시도는 정말 감사하겠습니다! (나는 정말로 문제가 어디에서 왔는지 모른다) 고마워!

참고 : 이미 나는이에 대한 해결책을 발견 (여러 스택 오버플로 질문 포함) 작업 솔루션

+0

libs 조회 경로가 맞습니까? ./libs 대신 ../libs가 필요합니까? – florgeng

+0

LIB_DIR을 -L ../libs로 설정할 때 "찾을 수없는 -lglfw3"이 나타납니다. –

답변

0

을 찾는없이 구글에 많은 검색.

첫 번째해야 할 일은 내 main.cpp에 #define GLFW_DLL을 추가하는 것입니다.

이 작업을 수행 한 후에 나는 Undefined reference to '_imp__glfwInit' 오류가있었습니다. 이 오류를 해결하기 위해 필자는/libs에서 * .a 파일을 제거한 다음 내 dll 파일을 프로젝트의 루트로 옮겼습니다 (누락 된 dll 오류를 방지하기 위해).