C++ 对“SDL#U main'”的未定义引用;在Mingw32

C++ 对“SDL#U main'”的未定义引用;在Mingw32,c++,sdl,C++,Sdl,我正在尝试在Windows 10 64位计算机上编译SDL项目。不幸的是,在使用mingw32-make编译时。我的编译在完成之前失败了,它抛出了一个很好的“未定义的对'SDL_main'的引用”。我已经确保使用了mingw开发库“i686-w64-mingw32”。(我也切换到“x86_64-w64-mingw32”,但结果相同。)和#在包含SDL后取消定义main 以下是运行mingw32 make后的控制台输出 g++ ./neo/engine/gamesys/EngineCore.cpp

我正在尝试在Windows 10 64位计算机上编译SDL项目。不幸的是,在使用mingw32-make编译时。我的编译在完成之前失败了,它抛出了一个很好的“未定义的对'SDL_main'的引用”。我已经确保使用了mingw开发库“i686-w64-mingw32”。(我也切换到“x86_64-w64-mingw32”,但结果相同。)和#在包含SDL后取消定义main

以下是运行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
生成文件

#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

#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;
}
#包括“gamesys/EngineCore.hpp”
外部“C”//setWindowTitle(“像素地狱引擎0.0.1”);
/*初始化游戏引擎*/
如果(!引擎->初始化())
返回1;
/*运行框架*/
引擎->运行();
/*完成后清理内存*/
引擎->clearAll();
删除引擎;
返回0;
}
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 //....
\ifndef发动机\u核心\u水电站
#定义引擎、核心和HPP
#包括
#包括
#包括
#包括
#包括
#未定义主/。。。。
从以下位置开始:

确保将main()声明为:

您的
main.cpp
文件看起来确实不正确。

有关更多详细信息,请参阅上述链接。

Ah需要将Makefile上的第3行更改为:

OBJS = $(wildcard ./neo/engine/*.cpp)  $(wildcard ./neo/engine/**/*.cpp) 

我假设/***/.cpp会修复…

是的,已经尝试过了。尽管我的main中没有任何SDL调用。甚至在int main之前尝试了#undef main以确定。尽管我认为我的应用程序中不需要任何参数,但这个答案修复了它,谢谢+我喜欢花1-2个小时来解决我的Makefile中配置混乱的问题。
OBJS = $(wildcard ./neo/engine/*.cpp)  $(wildcard ./neo/engine/**/*.cpp)