在cmake中为MinGW链接SDL1.2时,对WinMain @ 16的错误引用

问题描述 投票:0回答:1

我最近设法找到了与SDL2有关的此问题的解决方案,但是以某种方式,这些解决方案不适用于SDL1.2。我尝试使用标志-lmingw32 -lSDL -lSDLmain,并将add_definitions(-DSDL_MAIN_HANDLED)添加到CMakeLists.txt文件的末尾。但是我仍然收到以下错误消息:

====================[ Build | Graphics_project | Debug ]========================
"A:\CLion 2019.2.5\bin\cmake\win\bin\cmake.exe" --build D:\Coding\Projects\Graphics_project\cmake-build-debug --target Graphics_project -- -j 4
[ 50%] Linking CXX executable Graphics_project.exe
D:/Coding/MSYS2/mingw32/bin/../lib/gcc/i686-w64-mingw32/9.3.0/../../../../i686-w64-mingw32/bin/ld.exe: D:/Coding/MSYS2/mingw32/bin/../lib/gcc/i686-w64-mingw32/9.3.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o): in function `main':
D:/mingwbuild/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [Graphics_project.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/Graphics_project.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/Graphics_project.dir/rule] Error 2
CMakeFiles\Graphics_project.dir\build.make:85: recipe for target 'Graphics_project.exe' failed
CMakeFiles\Makefile2:74: recipe for target 'CMakeFiles/Graphics_project.dir/all' failed
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/Graphics_project.dir/rule' failed
Makefile:117: recipe for target 'Graphics_project' failed
mingw32-make.exe: *** [Graphics_project] Error 2

这是我的CMakeLists.txt内容:

cmake_minimum_required(VERSION 3.15)
project(Graphics_project)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

find_package(SDL REQUIRED)
include_directories(${SDL_INCLUDE_DIR})

add_executable(Graphics_project main.cpp)

target_link_libraries(${PROJECT_NAME} ${SDL_LIBRARY})
add_definitions(-DSDL_MAIN_HANDLED)

并且在项目文件夹的另一个cmake文件夹中,我有一个FindSDL.cmake文件:

set(FIND_SDL_PATHS D:/Coding/Devs/SDL-devel-1.2.15-mingw32/SDL-1.2.15)

find_path(SDL_INCLUDE_DIR SDL
        PATH_SUFFIXES include
        PATHS ${FIND_SDL_PATHS})

find_library(SDL_LIBRARY
        NAMES SDL SDLmain
        PATH_SUFFIXES lib
        PATHS ${FIND_SDL_PATHS})

我正在尝试编译一个简单的“ Hello World”:

#include <iostream>
#include "SDL/SDL.h"

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
} 

我希望获得一些帮助,我只是不了解它与SDL2库链接有什么不同。

cmake static-linking sdl-1.2
1个回答
0
投票

您缺少WIN32中的add_executable()选项。

add_executable(Graphics_project WIN32 main.cpp)

Windows的一个怪癖是GUI应用程序(不是控制台应用程序)用main()替换了程序的入口点(通常称为WinMain()的第一个函数),而后者又调用了main()函数经过一些设置。 WIN32开关可确保生成此函数。

© www.soinside.com 2019 - 2024. All rights reserved.