我正在尝试为this tutorial创建一个opengl项目,但我无法编译我的程序。
目前的问题是每个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;
}
以下makefile:
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/$@ $^ $(LDLIBS)
bin/%.o: src/%.c
@$(FAKEPATH)echo ===== Creating file $@ ===
$(FAKEPATH)mkdir -p $(dir $@)
$(CXX) $(INC_DIR) -o $@ -c $<
bin/%.o: src/%.cpp
@$(FAKEPATH)echo ===== Creating file $@ ===
$(FAKEPATH)mkdir -p $(dir $@)
$(CXX) $(INC_DIR) -o $@ -c $<
clean:
@$(FAKEPATH)rm -rf bin/
cleaner: clean
@$(FAKEPATH)rm -rf build/
最后,我的文件排序如下:
我使用MinGW代替g ++,使用cygwin代替linux命令。
任何帮助或尝试都会非常感激! (我真的不知道问题出在哪里) 谢谢!
注意:我已经在google上搜索了很多而没有找到任何可行的解决方案(包括几个堆栈溢出问题)
答案 0 :(得分:0)
我找到了解决方法。
我要做的第一件事就是在main.cpp中添加 <system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Cache">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Http">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.WebSockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Cache" value="Verbose"/>
<add name="System.Net.Http" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
<add name="System.Net.WebSockets" value="Verbose"/>
</switches>
<sharedListeners>
<add name="System.Net"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="network.log"
/>
</sharedListeners>
<trace autoflush="true"/>
。
执行此操作后,我收到错误#define GLFW_DLL
。为了解决这个错误,我不得不删除/ libs中的* .a文件,然后将我的.dll文件移动到项目的根目录(以避免丢失dll错误)。