0

我最近设法找到了与 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 库链接有何不同。

4

1 回答 1

0

您缺少 中的WIN32选项add_executable()

add_executable(Graphics_project WIN32 main.cpp)

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

于 2020-04-03T05:47:37.863 回答