更感兴趣的是什么,但是你能在linux下编译一个DirectX应用程序吗?
显然没有正式的SDK,但我认为用葡萄酒可能是可能的。
据推测,wine有一个DirectX界面的实现才能运行游戏?有可能与之相关联吗? (编辑:这叫做winelib)
如果做不到这一点,也许是一个mingw交叉编译器,应用程序在wine下运行。
一半在这里回答了我自己的问题,但是想知道是否有人听说过这样的事情?答案 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库。
答案 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上进行了设置),该服务器为最终用户创建了兼容的二进制文件。