【问题标题】:Is it possible to develop DirectX apps in Linux?是否可以在 Linux 中开发 DirectX 应用程序?
【发布时间】:2008-09-07 00:30:48
【问题描述】:

更多的是出于兴趣,但是你能在 linux 下编译 DirectX 应用吗?

显然没有官方的 SDK,但我认为可以使用 wine。

想必wine 有一个DirectX 接口的实现来运行游戏?是否可以链接反对? (编辑:这叫做 winelib)

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

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

【问题讨论】:

    标签: c++ linux directx mingw wine


    【解决方案1】:

    我在这方面有一些运气。我已经成功编译了this simple Direct3D example

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

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

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

    wineg++ -ld3d9 -ld3dx9 triangle.cpp
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您不能链接到 wine,因为它本质上是一个呼叫拦截器/翻译器,而不是一组您可以挂钩的库。如果 linux 很重要,请使用 OpenGL/SDL/OpenAL。

        【讨论】:

          【解决方案4】:

          我相信(我从未尝试过)您可以针对 winelib 编译 Linux 二进制文件。所以它就像一个 Linux 可执行文件一样工作,但使用的是 windows 库。

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

          【讨论】:

          • 是的,这就是我问这个问题时的想法。我会进一步调查。
          【解决方案5】:

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

          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。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

                虽然这个问题已经过时了,但我还是决定更新它,因为它不断弹出给我作为针对这个特定问题的第一个建议。

                正如前面的答案已经建议您可以针对 winelib 进行编译。但是,还有另外两种解决方案。

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

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

                旁注: 后者允许您使用 linux 设置 CI 服务器(我在树莓派上这样做),它为最终用户创建兼容的二进制文件。

                【讨论】:

                  【解决方案9】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2017-03-26
                    • 2020-06-22
                    • 2011-08-13
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-09-28
                    • 1970-01-01
                    相关资源
                    最近更新 更多