我正在尝试在Linux上编译一个windows程序(一个相当简单的程序,它只显示一个窗口并播放一个正弦波)。为了确保这不是一个X-Y问题,我试着这样做是为了我自己的方便,因为我太习惯我的Linux热键,工作流等。
无论如何,我所做的就是安装g++-mingw-w64,从mingw sourceforge (https://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-5.0.2/)获取一个w32api.tar.xz,将其解压到我的项目目录中,按照本文(https://www.linux.org/threads/how-to-use-windows-h-c.28353/#post-88213)中的描述获取libgcc_s_sjlj-1.dll,然后尝试使用以下命令编译该项目
i686-w64-mingw32-g++ -I w32api/include/ -L w32api/lib/ source/win32_handmade_linux.cpp我得到的是:
In file included from w32api/include/winsock2.h:62,
from w32api/include/_winsock.h:50,
from w32api/include/windows.h:85,
from source/win32_handmade_linux.cpp:30:
w32api/include/winsock.h:54:10: fatal error: sys/bsdtypes.h: No such file or directory
54 | #include <sys/bsdtypes.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.用谷歌搜索并没有什么真正的帮助;我在系统上的任何地方都找不到这个文件,包括我的Windows安装在另一个硬盘上。我很困惑。我不得不说,我完全没有跨平台编译的经验,所以可能我一开始就做了一些愚蠢的事情,只是没有意识到而已。
也许我在这一步走错了?我需要的所有特定于windows的头文件都是
#include <windows.h>
#include <xinput.h>
#include <dsound.h>但也许无论如何都太难实现了,我应该放弃这个想法,只需在VM下编译和运行程序,并在Linux上开发它?
发布于 2021-06-13 22:54:10
所以,就像@BrechtSanders告诉我的那样,如果我已经安装了w32api,我就不需要单独的mingw或类似的东西。
实际上,我所做的是找到了mingw附带的头文件(在我的系统上是/usr/share/mingw-w64/include/),找到了libgdi32.a (/usr/i686-w64-mingw32/lib/libgdi32.a),并将编译命令更改为
i686-w64-mingw32-g++ -I /usr/share/mingw-w64/include/ win32_handmade_linux.cpp /usr/i686-w64-mingw32/lib/libgdi32.a同时删除伪造的DLL和w32api子目录。一切正常!此外,经过一些修补之后(我必须在我的wine配置中将Z:\\usr\\lib\\gcc\\i686-w64-mingw32\\9.3-win32\\设置为system.reg中的path ),得到的可执行文件可以在wine下完美地运行!
https://stackoverflow.com/questions/67949563
复制相似问题