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

问题描述 投票:12回答:9

比其他任何东西更有趣,但是您可以在Linux下编译DirectX应用程序吗?

显然没有官方的SDK,但我认为使用酒可能会实现。

大概wine为了运行游戏而具有DirectX接口的实现?是否可以对此进行链接? (编辑:这称为winelib)

失败,也许是mingw交叉编译器,其应用程序在wine下运行。

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

c++ linux directx mingw wine
9个回答
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脚本。


4
投票

如果不是要移植而是要创建,则应真正考虑OpenGL,因为此API与DirectX一样强大,并且更容易移植到Mac或Linux。

我不知道您的要求,所以最好提一下。


2
投票

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


2
投票

我相信(我从未尝试过)您可以针对winelib编译Linux二进制文件。因此,它的工作方式类似于Linux可执行文件,但带有Windows库。

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


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。


0
投票

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


0
投票

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


0
投票

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


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.