gpt4 book ai didi

c++ - Mingw32 中对 `SDL_main' 的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 00:47:06 31 4
gpt4 key购买 nike

我正在尝试在我的 Windows 10 64 位机器上编译我的 SDL 项目。不幸的是,在使用 mingw32-make 进行编译时。我的编译就在它完成链接之前失败,抛出良好的旧“对 `SDL_main' 的 undefined reference ”。我确定我使用了 mingw 开发库“i686-w64-mingw32”。 (我也切换到“x86_64-w64-mingw32”,但结果相同。)和包含 SDL 后的#undef 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

主要.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;
}

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 //....

最佳答案

来自 documentation :

Make sure that you are declaring main() as:

#include "SDL.h"

int main(int argc, char *argv[])

您的 main.cpp 文件看起来确实不正确。
有关详细信息,请参阅上述链接。

关于c++ - Mingw32 中对 `SDL_main' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830218/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com