简体   繁体   English

在Mingw32中未定义对`SDL_main'的引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM