代码之家  ›  专栏  ›  技术社区  ›  Nick

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

  •  12
  • Nick  · 技术社区  · 16 年前

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

    显然没有官方的SDK,但我想这可能与葡萄酒有关。

    wine大概有一个DirectX接口的实现来运行游戏?有可能与此相联系吗?(编辑:这称为winelib)

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

    8 回复  |  直到 16 年前
        1
  •  10
  •   Community CDub    7 年前

    我在这方面运气不错。我已经设法编译了 this simple Direct3D example

    我使用winelib来实现这个(Ubuntu上的wine开发包)。幸亏 alastair 谢谢你把我指给winelib。

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

    wineg++ -ld3d9 -ld3dx9 triangle.cpp
    

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

        2
  •  4
  •   Vincent Robert    16 年前

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

        3
  •  2
  •   Dungeo    16 年前

    你不能链接wine,因为它本质上是一个调用阻断器/转换器,而不是一组你可以连接的库。如果linux很重要,那么就使用OpenGL/SDL/OpenAL。

        4
  •  2
  •   UK-AL    16 年前

    我相信(我从未尝试过)您可以针对winelib编译Linux二进制文件。因此,它的工作原理与Linux可执行文件类似,但使用的是windows库。

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

        5
  •  1
  •   Guest1337    12 年前

    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
  •  0
  •   Nicholas    16 年前

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

        7
  •  0
  •   CiNN    16 年前

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

        8
  •  0
  •   Julian Kirsch    5 年前

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

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

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

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

        9
  •  0
  •   HoldOffHunger Lux    4 年前

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