是否有可能在Linux中开发DirectX应用程序?

时间:2008-09-07 00:30:49

标签: c++ linux directx mingw wine

更感兴趣的是什么,但是你能在linux下编译一个DirectX应用程序吗?

显然没有正式的SDK,但我认为用葡萄酒可能是可能的。

据推测,wine有一个DirectX界面的实现才能运行游戏?有可能与之相关联吗? (编辑:这叫做winelib)

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

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

9 个答案:

答案 0 :(得分:10)

我有幸运气。我设法编译this simple Direct3D example

我使用winelib(Ubuntu上的wine-dev包)。感谢alastair将我指向winelib。

我略微修改了源代码以将wchars转换为chars(第52行的1,第55行的2,通过删除字符串文字之前的L)。可能有一种方法可以解决这个问题,但是这种方法已经开始运行了。

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

wineg++ -ld3d9 -ld3dx9 triangle.cpp

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

答案 1 :(得分:4)

如果这不是移植而是创建,你应该考虑OpenGL,因为这个API和DirectX一样强大,并且更容易移植到Mac或Linux。

我不知道你的要求所以更好地提及它。

答案 2 :(得分:2)

你不能链接葡萄酒,因为它本质上是一个调用interdictor / translator而不是你可以挂钩的一组库。如果linux很重要,请转到OpenGL / SDL / OpenAL。

答案 3 :(得分:2)

我相信(我从未尝试过这个)你可以针对winelib编译Linux binarys。所以它就像Linux可执行文件一样,但是有了windows库。

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

答案 4 :(得分:1)

转到包含源的目录并输入:

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。

答案 5 :(得分:0)

目前无法编译DirectX代码直接针对Linux。您可以像平常一样构建应用程序,然后使用Wine / Cedega等兼容层运行它。

答案 6 :(得分:0)

Wine是在Linux中运行DirectX的唯一方法

答案 7 :(得分:0)

您可以在linux中编译directx应用程序,但不能立即启动它。 如果你使用一个使用windows exe的交叉编译器并指向windows sdk和directx sdk。

答案 8 :(得分:0)

尽管这个问题已经过时,但我还是决定对其进行更新,因为它一直作为我针对此特定问题的第一个建议而不断出现。

如前所述,您可以针对winelib进行编译。但是,还有另外两种解决方案。

第一个解决方案是使用为您的发行版提供的MinGW。 MinGW是一个“交叉编译器”,可以从macOS或linux编译到Windows,并支持DirectX。请注意,使用MinGW编译的C ++库与MSVC编译器的ABI不兼容,因此无法使用。但是,可以使用Wine执行生成的二进制文件。

第二种解决方法是访问use clang as a cross compiler。 Clang通常包括Windows开箱即用的Compiler和Linker。但是,这需要您自己提供标头和库。另一方面,以这种方式编译的库与MSVC兼容,因此可以被它使用。

旁注: Latter允许您使用linux设置CI服务器(我在raspberry pi上进行了设置),该服务器为最终用户创建了兼容的二进制文件。