如何在 Linux for Windows 中使用 SDL 2 进行交叉编译

Posted

技术标签:

【中文标题】如何在 Linux for Windows 中使用 SDL 2 进行交叉编译【英文标题】:How to cross-compile with SDL 2 from Linux for Windows 【发布时间】:2016-01-14 17:16:26 【问题描述】:

我尝试在我的 Arch Linux(64 位)上编译一个使用 SDL 2 和 mingw-w64-g++ 编译器的简单 C++ 程序。

为此,我从here 下载了 SDL2-devel-2.0.4-mingw.tar.gz

prog.cpp:

#include <SDL.h>

int main ()

    SDL_Init (SDL_INIT_VIDEO);

    SDL_Window *sdlWnd = SDL_CreateWindow ("Test", SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED, 800, 600, 0);

    SDL_Event event;
    bool running = true;

    while (running) 
        while (SDL_PollEvent (&event)) 
            if (event.type == SDL_QUIT) 
                running = false;
                break;
            
        
    

    return 0;

生成文件:

GPP = x86_64-w64-mingw32-g++
prog.exe: prog.o
    $(GPP) -o prog.exe prog.o -LSDL2-2.0.4/lib/x64 -lSDL2main -lSDL2
prog.o: prog.cpp
    $(GPP) -o prog.o -c -ISDL2-2.0.4/include prog.cpp

现在制作给出错误:

x86_64-w64-mingw32-g++ -o prog.exe prog.o -LSDL2-2.0.4/lib/x64 -lSDL2main -lSDL2
Warning: corrupt .drectve at end of def file
SDL2-2.0.4/lib/x64/SDL2main.lib(./x64/Release/SDL_windows_main.obj):(.text[main]+0x1c): undefined reference to `SDL_main'

为什么未定义对 `SDL_main' 的引用?虽然我指定了 -lSDL2main ?

我做错了什么? :(

【问题讨论】:

Cannot find sdl2main的可能重复 【参考方案1】:

好的,这是因为 main 函数签名,必须声明为:

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

根据official SDL FAQ:

确保您将 main() 声明为:

#include "SDL.h"

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

你应该使用 main() 而不是 WinMain() 即使你是 创建 Windows 应用程序,因为 SDL 提供了 WinMain() 在调用你的之前执行一些 SDL 初始化 主要代码。如果由于某种原因您需要使用 WinMain(),请查看 在 src/main/win32/SDL_main.c 中的 SDL 源代码中看看是什么样的 您需要在 WinMain() 函数中进行初始化,以便 SDL 工作正常。

【讨论】:

以上是关于如何在 Linux for Windows 中使用 SDL 2 进行交叉编译的主要内容,如果未能解决你的问题,请参考以下文章

xampp for Windows:如何选择绝对路径?

如何安装windows services for unix

Windows Subsystem for Linux(wsl)使用

如何在windows 安装git shell

wsl(Windows Subsystem for Linux)安装简易指南

使用 MXE - GSL 链接在 Linux for Windows 上进行交叉编译?