C++ 项目未链接GLFW
因此,我有一个具有以下结构的多个依赖项的项目: 依赖关系C++ 项目未链接GLFW,c++,linux,opengl,makefile,glfw,C++,Linux,Opengl,Makefile,Glfw,因此,我有一个具有以下结构的多个依赖项的项目: 依赖关系 -高兴 -GLFW -ImGui 发动机 沙箱 引擎包括依赖项,沙盒包括引擎 项目文件由premake5生成。 这可以在Windows下完美地编译和运行,但今天我尝试将其移植到linux。 我使用linux版本的premake生成了makefiles。 所有文件都成功编译,但当链接过程开始时,我收到以下错误: ===构建沙箱(调试)=== 链接沙盒 ../Engine/vendor/GLFW/bin/Debug-linux-x86_64/
-高兴
-GLFW
-ImGui
发动机
沙箱
引擎包括依赖项,沙盒包括引擎 项目文件由premake5生成。 这可以在Windows下完美地编译和运行,但今天我尝试将其移植到linux。 我使用linux版本的premake生成了makefiles。 所有文件都成功编译,但当链接过程开始时,我收到以下错误: ===构建沙箱(调试)===
链接沙盒
../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a(context.o):在函数
\u glfwRefreshContextAttribs'中:
/home/netcode/Engine/Engine/vendor/GLFW/src/context.c:361:未定义的引用
\u glfwplatformgetts'../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a(context.o):在函数
glfwMakeContextCurrent':
/home/netcode/Engine/Engine/vendor/GLFW/src/context.c:614:未定义的引用
../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a(context.o):在函数glfwGetCurrentContext'中:
/home/netcode/Engine/Engine/vendor/GLFW/src/context.c:638:未定义的引用
../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a(context.o):在函数glfwSwapInterval'中:
/home/netcode/Engine/Engine/vendor/GLFW/src/context.c:664:未定义的引用
../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a(context.o):在函数glfwExtensionSupported'中:
/home/netcode/Engine/Engine/vendor/GLFW/src/context.c:682:未定义的引用
\u glfwplatformgetts'
等等
这是最终的生成文件:
# Alternative GNU Make project makefile autogenerated by Premake
ifndef config
config=debug
endif
ifndef verbose
SILENT = @
endif
.PHONY: clean prebuild
SHELLTYPE := posix
ifeq (.exe,$(findstring .exe,$(ComSpec)))
SHELLTYPE := msdos
endif
# Configurations
# #############################################
RESCOMP = windres
INCLUDES += -I../Engine/vendor/spdlog/include -I../Engine/src -I../Engine/vendor -I../Engine/vendor/glm -Isrc
FORCE_INCLUDE +=
ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES)
ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)
LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS)
define PREBUILDCMDS
endef
define PRELINKCMDS
endef
define POSTBUILDCMDS
endef
ifeq ($(config),debug)
TARGETDIR = ../bin/Debug-linux-x86_64/Sandbox
TARGET = $(TARGETDIR)/Sandbox
OBJDIR = ../bin-int/Debug-linux-x86_64/Sandbox
DEFINES += -DENGINE_DEBUG
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -g
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -g -std=c++17
LIBS += ../bin/Debug-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Debug-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Debug-linux-x86_64/ImGui/libImGui.a -lXrandr -lXi -lGLEW -lGLU -lGL -lX11 -ldl -lpthread -lstdc++fs
LDDEPS += ../bin/Debug-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Debug-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Debug-linux-x86_64/ImGui/libImGui.a
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64
else ifeq ($(config),release)
TARGETDIR = ../bin/Release-linux-x86_64/Sandbox
TARGET = $(TARGETDIR)/Sandbox
OBJDIR = ../bin-int/Release-linux-x86_64/Sandbox
DEFINES += -DENGINE_RELEASE
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -std=c++17
LIBS += ../bin/Release-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Release-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Release-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Release-linux-x86_64/ImGui/libImGui.a -lXrandr -lXi -lGLEW -lGLU -lGL -lX11 -ldl -lpthread -lstdc++fs
LDDEPS += ../bin/Release-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Release-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Release-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Release-linux-x86_64/ImGui/libImGui.a
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -s
else ifeq ($(config),dist)
TARGETDIR = ../bin/Dist-linux-x86_64/Sandbox
TARGET = $(TARGETDIR)/Sandbox
OBJDIR = ../bin-int/Dist-linux-x86_64/Sandbox
DEFINES += -DENGINE_DIST
ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2
ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -std=c++17
LIBS += ../bin/Dist-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Dist-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Dist-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Dist-linux-x86_64/ImGui/libImGui.a -lXrandr -lXi -lGLEW -lGLU -lGL -lX11 -ldl -lpthread -lstdc++fs
LDDEPS += ../bin/Dist-linux-x86_64/Engine/libEngine.a ../Engine/vendor/GLFW/bin/Dist-linux-x86_64/GLFW/libGLFW.a ../Engine/vendor/Glad/bin/Dist-linux-x86_64/Glad/libGlad.a ../Engine/vendor/imgui/bin/Dist-linux-x86_64/ImGui/libImGui.a
ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64 -m64 -s
else
$(error "invalid configuration $(config)")
endif
# Per File Configurations
# #############################################
# File sets
# #############################################
OBJECTS :=
OBJECTS += $(OBJDIR)/Sandbox2D.o
OBJECTS += $(OBJDIR)/SandboxApp.o
# Rules
# #############################################
all: $(TARGET)
@:
$(TARGET): $(OBJECTS) $(LDDEPS) | $(TARGETDIR)
$(PRELINKCMDS)
@echo Linking Sandbox
$(SILENT) $(LINKCMD)
$(POSTBUILDCMDS)
$(TARGETDIR):
@echo Creating $(TARGETDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) mkdir -p $(TARGETDIR)
else
$(SILENT) mkdir $(subst /,\\,$(TARGETDIR))
endif
$(OBJDIR):
@echo Creating $(OBJDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) mkdir -p $(OBJDIR)
else
$(SILENT) mkdir $(subst /,\\,$(OBJDIR))
endif
clean:
@echo Cleaning Sandbox
ifeq (posix,$(SHELLTYPE))
$(SILENT) rm -f $(TARGET)
$(SILENT) rm -rf $(OBJDIR)
else
$(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET))
$(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR))
endif
prebuild: | $(OBJDIR)
$(PREBUILDCMDS)
ifneq (,$(PCH))
$(OBJECTS): $(GCH) | $(PCH_PLACEHOLDER)
$(GCH): $(PCH) | prebuild
@echo $(notdir $<)
$(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<"
$(PCH_PLACEHOLDER): $(GCH) | $(OBJDIR)
ifeq (posix,$(SHELLTYPE))
$(SILENT) touch "$@"
else
$(SILENT) echo $null >> "$@"
endif
else
$(OBJECTS): | prebuild
endif
# File Rules
# #############################################
$(OBJDIR)/Sandbox2D.o: src/Sandbox2D.cpp
@echo $(notdir $<)
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
$(OBJDIR)/SandboxApp.o: src/SandboxApp.cpp
@echo $(notdir $<)
$(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"
-include $(OBJECTS:%.o=%.d)
ifneq (,$(PCH))
-include $(PCH_PLACEHOLDER).d
endif
#由Premake自动生成的备选GNU Make项目makefile
ifndef配置
config=debug
恩迪夫
冗长的
无声=@
恩迪夫
.假的:干净的预构建
SHELLTYPE:=posix
ifeq(.exe,$(findstring.exe,$(ComSpec)))
外壳类型:=msdos
恩迪夫
#配置
# #############################################
RESCOMP=windres
INCLUDES+=-I../Engine/vendor/spdlog/INCLUDES-I../Engine/src-I../Engine/vendor-I../Engine/vendor/glm-Isrc
武力包括+=
所有CPPFLAGS+=$(CPPFLAGS)-MMD-MP$(定义)$(包括)
所有_RESFLAGS+=$(RESFLAGS)$(定义)$(包括)
LINKCMD=$(CXX)-o“$@”$(对象)$(资源)$(所有标记)$(LIBS)
定义预构建CMD
恩德夫
定义预链接CMD
恩德夫
定义POSTBUILDCMDS
恩德夫
ifeq($(配置),调试)
TARGETDIR=../bin/Debug-linux-x86_64/Sandbox
TARGET=$(TARGETDIR)/Sandbox
OBJDIR=../bin int/Debug-linux-x86_64/Sandbox
定义+=-DENGINE\u调试
ALL_CFLAGS+=$(CFLAGS)$(ALL_CPPFLAGS)-m64-g
ALL_CXXFLAGS+=$(CXXFLAGS)$(ALL_CPPFLAGS)-m64-g-std=c++17
LIBS+=../bin/Debug-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad/Debug-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/Debug-linux-x86_64/imgui/libImGui.a-lXrandr-lXi-lGLEW-lGLU-lGLU-lGL-lX11-ldl-lpdc++-fs
LDDEPS+=../bin/Debug-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Debug-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad/Debug-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/bin/Debug-linux-x86_64/imgui/libImGui.a
所有_LDFLAGS+=$(LDFLAGS)-L/usr/lib64-m64
else ifeq($(配置),发布)
TARGETDIR=../bin/Release-linux-x86_64/Sandbox
TARGET=$(TARGETDIR)/Sandbox
OBJDIR=../bin int/Release-linux-x86_64/Sandbox
定义+=-DENGINE\u发布
ALL_CFLAGS+=$(CFLAGS)$(ALL_CPPFLAGS)-m64-O2
ALL_CXXFLAGS+=$(CXXFLAGS)$(ALL_CPPFLAGS)-m64-O2-std=c++17
LIBS+=../bin/Release-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Release-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/Release-linux-x86_64/imgui/libImGui/libImGui.a-lXrandr-lXi-lGLEW-lGLU-lGLU-lGL-lX11-ldl-lpdc++-fs
LDDEPS+=../bin/Release-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Release-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad/Release-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/bin/Release-linux-x86_64/imgui/libImGui.a
所有_LDFLAGS+=$(LDFLAGS)-L/usr/lib64-m64-s
else ifeq($(配置),dist)
TARGETDIR=../bin/Dist-linux-x86_64/Sandbox
TARGET=$(TARGETDIR)/Sandbox
OBJDIR=../bin int/Dist-linux-x86_64/Sandbox
定义+=-DENGINE\u距离
ALL_CFLAGS+=$(CFLAGS)$(ALL_CPPFLAGS)-m64-O2
ALL_CXXFLAGS+=$(CXXFLAGS)$(ALL_CPPFLAGS)-m64-O2-std=c++17
LIBS+=../bin/Dist-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Dist-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad/bin/Dist-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/bin/Dist-linux-x86_64/imgui/libImGui/libImGui/libImGui.a-lXrandr-lXi-lGLEW-lGLU-lGL-lX11-ldl-thread-lstdc++
LDDEPS+=../bin/Dist-linux-x86_64/Engine/libEngine.a../Engine/vendor/GLFW/bin/Dist-linux-x86_64/GLFW/libGLFW.a../Engine/vendor/Glad/bin/Dist-linux-x86_64/Glad/libGlad.a../Engine/vendor/imgui/bin/Dist-linux-x86_64/imgui/libImGui.a
所有_LDFLAGS+=$(LDFLAGS)-L/usr/lib64-m64-s
其他的
$(错误“无效配置$(配置)”)
恩迪夫
#每文件配置
# #############################################
#文件集
# #############################################
对象:=
OBJECTS+=$(OBJDIR)/Sandbox2D.o
OBJECTS+=$(OBJDIR)/SandboxApp.o
#规则
# #############################################
全部:$(目标)
@:
$(目标):$(对象)$(LDDEPS)|$(目标目录)
$(预链接CMDS)
@回声连接沙盒
$(无提示)$(LINKCMD)
$(POSTBUILDCMDS)
$(TARGETDIR):
@echo创建$(TARGETDIR)
ifeq(posix,$(外壳类型))
$(静默)mkdir-p$(TARGETDIR)
其他的
$(无提示)mkdir$(subst/,\ \,$(TARGETDIR))
恩迪夫
$(OBJDIR):
@echo创建$(OBJDIR)
ifeq(posix,$(外壳类型))
$(静默)mkdir-p$(OBJDIR)
其他的
$(无提示)mkdir$(subst/,\ \,$(OBJDIR))
恩迪夫
清洁:
@回音