如何从 Linux 与 SDL 2 对 Windows 进行交叉编译

2024-01-02

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

为此,我从以下位置下载了 SDL2-devel-2.0.4-mingw.tar.gzhere https://www.libsdl.org/download-2.0.php

程序.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

现在make给出了错误:

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 ?

我做错了什么? :(


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

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

根据SDL 官方常见问题解答 https://wiki.libsdl.org/FAQWindows#I_get_.22Undefined_reference_to_.27SDL_main.27.22_...:

确保将 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 工作正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Linux 与 SDL 2 对 Windows 进行交叉编译 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 如何更改 ExpandableListView 组指示器位置?

    我想改变ExpandableListView 组指示符向右填充 我使用自定义适配器将数据加载到ExpandableListView 这是我的ExpandableListView xml
  • Laravel 4-重定向到 javascript 代码 Blade 模板内的路由

    我正在尝试使用 javascript 和 Blade 引擎编写一个简单的重定向 这是我想要做的一个示例 JavaScript 代码 p Click the button to go to the home page p
  • 如何加快 Pandas 中最近的搜索速度(也许通过矢量化代码)

    我有两个数据框 每个都包含位置 X Y 和该点的值 对于第一个数据框中的每个点 我想找到第二个数据框中最接近的点 然后找到差异 我的代码可以工作 但它使用 for 循环 速度很慢 关于如何加快速度有什么建议吗 我知道为了性能而摆脱 pand
  • 如何解读Windows任务管理器?

    我运行的是 Windows 7 RC1 它使用与 Vista 相同的 WTM 当我查看流程时 有一些列我不确定有什么区别 内存 工作集 内存 私有工作集 内存 提交大小 谁能告诉我它们是什么 从以下article http cybernet
  • Minimagick 上传期间出现错误“composite -compose Over -gravity North”

    我正在尝试通过以下方式上传图像gem carrierwave gt 1 1 0 and gem mini magick gt 4 7 0 上传图像 我收到这个错误 我正在使用此代码上传图像 MiniMagick Tool Convert n
  • Firefox 与 contextmenu 事件同时触发 click 事件

    接下来的代码记录窗口对象上触发的事件 FIDDLE https jsfiddle net Makha92 kh8roneh 1 var logEvent function var count 1 timer 0 buffer functio
  • 当我在java中加载excel时出现错误

    我正在尝试用 java 读取一个简单的 xlsx private void readExcelData String excel throws Exception FileInputStream file new FileInputStre
  • PayPal REST API 交叉参考交易与付款

    我已成功使用 REST PHP API 完成了 PayPal 付款 但是 我想知道如何将 REST 交易与 PayPal Web 用户界面交叉引用 在 REST 方面 我有付款 ID getID 在交易被批准之前收到 看起来像 PAY 5B
  • Cocos 2d-x 中带有贝塞尔曲线的圆角矩形

    是否可以使用 DrawNode 对象绘制一个圆角矩形 我认为使用贝塞尔曲线是可能的 但我做了一些尝试 但我认为我无法处理它 查看 API 我只发现这两个函数 绘制四边形贝塞尔曲线 const Vec2 origin const Vec2 c
  • RTSP 身份验证:摘要问题

    我需要向流媒体服务器验证我的 RTSP 流 挑战如下 RTSP 1 0 401 Unauthorized WWW Authenticate Digest realm Streaming Server nonce 76bfe6986d3e76
  • 如何使用 Open CV 检测哈欠

    我正在开发一个 iOS 应用程序 需要检测用户何时打哈欠 我所做的是包括 Open CV 并使用 Haar Cascade 查找面孔 然后在面孔内查找嘴巴 也使用 HaarCascade 我遇到的麻烦是 我相信像做 face y mouth
  • UWP 共享功能在 Windows 10 Mobile 中不起作用

    我使用一个按钮创建了一个非常简单的 UWP 应用程序 点击它应该显示内置的共享弹出窗口分享一个PDF file 事实上 我让它适用于 Windows 10 桌面 但不适用于移动设备 弹出窗口不会出现在屏幕上 PDF 文件以字节数组形式出现
  • 保存某个范围内的所有信息并稍后恢复

    有没有办法将字体分配给范围 假设我有一个对象 myFont 我可以写 with Range A1 Font Bold myFont Bold Size myFont Size same with other properties end w
  • 如何通过滚动更改导航栏背景?

    我是网络开发新手 对于我的一个项目 我想在用户滚动时更改导航栏的背景 我希望它看起来像这样 https www nlogic co understanding vlan hopping attacks https www nlogic co
  • Java 问题中的暴力数独求解器算法

    除了求解方法之外 算法中的一切似乎都运行良好 当它使用可解数独板执行程序时 它会说无法解决 我已经尝试了解决方法中我能想到的一切 我尝试过调试 但在测试第一行后失败 有什么建议么 这是到目前为止的完整代码 public class Sudo
  • 我应该如何对具有许多子功能的功能进行单元测试?

    我希望更好地理解我应该测试具有许多子步骤或子功能的函数 假设我有以下功能 Modify the state of class somehow public void DoSomething DoSomethingA DoSomethingB
  • Visual Studio 的 .vsmdi 文件有多重要?

    这是场景 用户 A 已通过 Visual Studio 2010 创建了单元测试 测试项目和单元测试源代码已签入版本控制 用户B 从版本控制中获取测试项目和单元测试源代码 然后 用户 B 打开测试项目并收到一条消息 加载 blah blah
  • 如何正确使用同步链接哈希图

    尝试通过子类化链接哈希映射来制作 lru 映射 地图通过 collections synchronized 运行 映射的所有用法都被同步块包围 如果它们全部被删除 单元测试也会失败 人们可能会认为它们是不必要的 因为地图是通过 collec
  • “react-router”不包含名为“BrowserRouter”的导出

    我正在使用 React router 版本 5 5 1 并尝试在我的index js file src index js 14 8 21 react router does not contain an export named Brows
  • 如何从 Linux 与 SDL 2 对 Windows 进行交叉编译

    我尝试在 Arch Linux 64 位 上使用 SDL 2 和 mingw w64 g 编译器编译一个简单的 C 程序 为此 我从以下位置下载了 SDL2 devel 2 0 4 mingw tar gzhere https www li