[英]Undefined reference to `SDL_main' in Mingw32
I'm attempting to compile my SDL project on my Windows 10 64bit machine. 我正在尝试在Windows 10 64位计算机上编译我的SDL项目。 Unfortunately, when compiling using mingw32-make.
不幸的是,使用mingw32-make进行编译时。 My compile fails just before it's done linking throwing good old "undefined reference to `SDL_main'".
我的编译在完成链接之前就失败了,它会抛出旧的“对SDL_main的未定义引用”。 I've made sure I use the mingw dev libraries "i686-w64-mingw32".
我已确保使用mingw开发库“ i686-w64-mingw32”。 (I also switch to "x86_64-w64-mingw32", but same results.) and #undef main after I include SDL.
(我也切换到“ x86_64-w64-mingw32”,但结果相同。)和#undef main在包含SDL之后。
Here is the console output after running mingw32-make... 这是运行mingw32-make后的控制台输出...
g++ ./neo/engine/gamesys/EngineCore.cpp ./neo/engine/gamesys/Logger.cpp ./neo/engine/gamesys/EventDispatcher.cpp ./neo/engine/renderer/Renderer.cpp ./neo/engine/renderer/RendererSetup.cpp -IC:\\mingw_dev_lib\\SDL2-2.0.4i686\\include -LC:\mingw_dev_lib\\SDL2-2.0.4i686\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -lopengl32 -lglu32 -o pixelHell
C:\mingw_dev_lib\SDL2-2.0.4i686\lib/libSDL2main.a(SDL_windows_main.o): In function `main_utf8':
/Users/slouken/release/SDL/SDL2-2.0.4-source/foo-x86/../src/main/windows/SDL_windows_main.c:126: undefined reference to `SDL_main'
/Users/slouken/release/SDL/SDL2-2.0.4-source/foo-x86/../src/main/windows/SDL_windows_main.c:126: undefined reference to `SDL_main'
/Users/slouken/release/SDL/SDL2-2.0.4-source/foo-x86/../src/main/windows/SDL_windows_main.c:126: undefined reference to `SDL_main'
collect2.exe: error: ld returned 1 exit status
Makefile:29: recipe for target 'all' failed
mingw32-make: *** [all] Error 1
Makefile 生成文件
#OBJS specifies which files to compile as part of the project
OBJS = $(wildcard ./neo/engine/**/*.cpp)
#CC specifies which compiler we're using
CC = g++
#INCLUDE_PATHS specifies the additional include paths we'll need
INCLUDE_PATHS = -IC:\\mingw_dev_lib\\SDL2-2.0.4i686\\include
#LIBRARY_PATHS specifies the additional library paths we'll need
LIBRARY_PATHS = -LC:\mingw_dev_lib\\SDL2-2.0.4i686\lib
#COMPILER_FLAGS specifies the additional compilation options we're using
# -w suppresses all warnings
# -Wl,-subsystem,windows gets rid of the console window
COMPILER_FLAGS = -w -Wl,-subsystem,windows
SDL_LIBS = sdl-config --libs
#LINKER_FLAGS specifies the libraries we're linking against
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2 -lopengl32 -lglu32
#OBJ_NAME specifies the name of our exectuable
OBJ_NAME = pixelHell
#This is the target that compiles our executable
all : $(OBJS)
$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
clean:
rm -f $(OBJ_NAME).exe
main.cpp main.cpp
#include "gamesys/EngineCore.hpp"
extern "C" //<---- Thought that would help...
int main(int argc, char *argv[])
{
phEngineCore* engine = new phEngineCore();
engine->setWindowTitle("Pixel Hell Engine 0.0.1");
/* Initalize the game engine. */
if(!engine->initalize())
return 1;
/* Run framework. */
engine->run();
/* Clean up memory when finished! */
engine->clearAll();
delete engine;
return 0;
}
Top of EngineCore.hpp EngineCore.hpp的顶部
#ifndef ENGINE_CORE_HPP
#define ENGINE_CORE_HPP
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <stdio.h>
#include <string>
#include <vector>
#undef main //....
As from the documentation : 从文档开始 :
Make sure that you are declaring main() as:
确保将main()声明为:
#include "SDL.h" int main(int argc, char *argv[])
Your main.cpp
file does not look right indeed. 您的
main.cpp
文件看起来确实不正确。
See the above mentioned link for further details. 有关更多详细信息,请参见上述链接。
Ah need to change line 3 on may Makefile to: 啊,需要将may Makefile的第3行更改为:
OBJS = $(wildcard ./neo/engine/*.cpp) $(wildcard ./neo/engine/**/*.cpp)
I would assumed the /**/*.cpp would have fixed that... 我以为/**/*.cpp将解决此问题...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.