所以,我尝试在用c ++制作的个人GameEngine中编译游戏。我使用makefile来编译所有文件。在Linux上编译是好的,但在Windows上,使用MinGW,我得到了这些错误:
C:\Users\Utilisateur\Desktop\Code\GitProjects\HyperGameEngine>make
sh.exe
process_begin: CreateProcess(NULL, uname -s, ...) failed.
File not found - *.cpp
File not found - -TYPE
File not found - D
process_begin: CreateProcess(NULL, uname -s, ...) failed.
process_begin: CreateProcess(NULL, uname -s, ...) failed.
g++ -o "/build"/a.exe -I"./inc/lua/" -I"inc" -I"./inc/" -I"./inc/SDL2/" -
L"lib/Windows" -static -static-libstdc++ -static-libgcc -std=c++14 -std=gnu++14
-Wunused-parameter -Wstrict-aliasing -lSDL2main -lSDL2 -lSDL2_net -mwindows -
lglew32s -llibSOIL -lopenal32 -lopengl32 -lBox2D -lfreetype -llua53 -dl
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot
open output file /build/a.exe: No such file or directory
collect2.exe: error: ld returned 1 exit status
make: *** ["/build"/a.exe] Erreur 1
这里是makefile:
#TODO Authoritive Server, Basic Server Browser (Hearthbeat to web server)? (maybe steam support)?
#
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
$(info $(SHELL))
ifeq ($(shell uname -s), Linux)
TARGET_EXEC ?= a.out
endif
ifeq ($(OS),Windows_NT)
TARGET_EXEC ?= a.exe
endif
BUILD_DIR ?= "$(CURRENT_DIRECTORY)/build"
SRC_DIRS ?= "$(CURRENT_DIRECTORY)/src" # src or Server
#QMAKE_CXXFLAGS += -std=c++11
SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_DIRS := $(shell find $(SRC_DIRS) -type d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
ifeq ($(shell uname -s), Linux)
CPPFLAGS ?= $(INC_FLAGS) -std=c++14 -MMD -MP -g -Wall -Wextra -O3 -fpermissive #-Werror
endif
ifeq ($(OS),Windows_NT)
CPPFLAGS ?= $(INC_FLAGS) -lmingw32 -std=c++14 -MMD -MP -g -Wall -Wextra -O3 -fpermissive -mwindows #-Werror
endif
#LINKER_FLAGS specifies the libraries we're linking against -L/usr/lib/nvidia-375/ -I./inc/ -w -lGLEW -lGL -lSLD2
ifeq ($(shell uname -s), Linux)
LINKER_FLAGS = -I./inc/ -I./inc/lua/ -L./lib/Linux/ -lSDL2 -lGLEW -lGL -lSOIL -lopenal -lBox2D -lSDL_net -llua53 -lfreetype -ldl
endif
ifeq ($(OS),Windows_NT)
LINKER_FLAGS = -dl # -I"./inc/lua/" -I"inc" -I"./inc/" -I"./inc/SDL2/" -L"lib/Windows" -static -static-libstdc++ -static-libgcc -std=c++14 -std=gnu++14 -Wunused-parameter -Wstrict-aliasing -lSDL2main -lSDL2 -lSDL2_net -mwindows -lglew32s -llibSOIL -lopenal32 -lopengl32 -lBox2D -lfreetype -llua53 -dl #-I"./inc/steam/" -lsteam_api #-llua53 -dl
endif
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
g++ $(OBJS) -o $@ $(LDFLAGS) $(LINKER_FLAGS)
# assembly
$(BUILD_DIR)/%.s.o: %.s
$(MKDIR_P) $(dir $@)
$(AS) $(ASFLAGS) $(LINKER_FLAGS) -c $< -o $@
# c source
$(BUILD_DIR)/%.c.o: %.c
$(MKDIR_P) $(dir $@)
g++ -std=c++0x $(CPPFLAGS) $(CFLAGS) $(LINKER_FLAGS) -c $< -o $@
# c++ source
$(BUILD_DIR)/%.cpp.o: %.cpp
$(MKDIR_P) $(dir $@)
g++ $(CPPFLAGS) $(CXXFLAGS) $(LINKER_FLAGS) -c $< -o $@
.PHONY: clean
clean:
$(RM) -r $(BUILD_DIR)/$(SRC_DIRS)
-include $(DEPS)
MKDIR_P ?= mkdir -p
然后,所有的库都在Linux上运行,我尝试重新安装MinGW,但没有任何改变。 makefile中的一些更改做了一些事情。在Windows部分中更改LinkerFlags的顺序是错误消息的一小部分。
答案 0 :(得分:0)
也许问题不是MinGW .. 根据我的理解,MinGW是一组编译器。所以,gcc和g ++。
MinGW包括:
GNU编译器集合(GCC)的一个端口,包括C,C ++,ADA
和 Fortran编译器;GNU Binutils for Windows(汇编程序,链接程序, 档案管理员);
命令行安装程序,带有可选的GUI 在MS-Windows上部署MinGW和MSYS的前端(mingw-get);
一个 GUI首次设置工具(mingw-get-setup),帮助您启动并运行 与mingw-get。 http://www.mingw.org/
如果你能够在一个“hello world”文件上运行g ++并获得一个exe,那么MinGW应该可以工作。
所以,似乎大多数MinGW和gnuwin32都不是问题! 正如用户657267指出的那样,您无法在Windows上使用Linux命令。 这说,这并不意味着它是不可能的,只是默认不存在。 “制作”这种方法的一种方法是安装Git(https://git-scm.com/download/win) 您可以选择所有默认选项...... 安装后,转到安装路径并通过bin文件夹的路径到Path Environment Variable。 这是一个screenshot of my Environment Variables