更出于兴趣,但是你能在 Linux 下编译 DirectX 应用程序吗?

显然没有官方的 SDK,但我想用 wine 可能可以实现。

大概wine有一个DirectX接口的实现来运行游戏?是否可以链接到它?(编辑:这称为 winelib)

如果做不到这一点,也许是一个 mingw 交叉编译器,该应用程序在 wine 下运行。

一半在这里回答了我自己的问题,但想知道是否有人听说过这样的事情?

有帮助吗?

解决方案

我在这方面有一些运气。我已经成功编译了 这个简单的 Direct3D 示例.

我为此使用了 winelib (Ubuntu 上的 wine-dev 包)。谢谢 阿拉斯泰尔 为我指明了 winelib。

我稍微修改了源代码,将 wchars 转换为 chars(第 52 行 1,第 55 行 2,通过删除字符串文字之前的 L)。可能有办法解决这个问题,但这已经启动并运行了。

然后我用以下内容编译了源代码:

wineg++ -ld3d9 -ld3dx9 triangle.cpp

这会生成一个 a.out.exe.so 二进制文件,以及一个在 wine 下运行它的 a.out 脚本。

其他提示

如果这不是关于移植而是关于创建,那么您确实应该考虑 OpenGL,因为该 API 与 DirectX 一样强大,并且更容易移植到 Mac 或 Linux。

我不知道你的要求,所以最好说一下。

您无法链接到 wine,因为它本质上是一个调用拦截器/翻译器,而不是一组您可以挂钩的库。如果 Linux 很重要,请选择 OpenGL/SDL/OpenAL。

我相信(我从未尝试过)你可以针对 winelib 编译 Linux 二进制文件。因此它的工作方式就像 Linux 可执行文件一样,但具有 Windows 库。

http://www.winehq.org/site/docs/winelib-guide/index

转到源目录并输入:

winemaker --lower-uppercase -icomdlg32 -ishell32 -ishlwapi -iuser32 -igdi32 -iadvapi32 -ld3d9 .
make
wine yourexecutable.exe.so

如果您收到此错误:

main.c:95:5: error: ‘struct IDirect3D9’ has no member named ‘CreateDevice’

确保您已将文件命名为 main.cpp 而不是 main.c。

目前还没有办法将 DirectX 代码编译为直接面向 Linux。您可以像平常一样构建应用程序,然后使用 Wine/Cedega 等兼容层运行它。

葡萄酒 是在 Linux 中运行 DirectX 的唯一方法

您可以在 Linux 中编译 directx 应用程序,但不能立即启动它。如果您使用交叉编译器生成Windows exe并指向Windows sdk和directx sdk。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top