让我描述一下我想做什么。我想制作一个可以在 Linux 和 Windows 上运行的软件/应用程序。它可以是任何语言,例如:cpp、java、python。我需要知道在 Linux 中制作可以编译(交叉编译)成 exe 的东西的最安全方法是什么。
我想你们之前已经听过这个问题无数次了。但我有一些建议要向你们提出。
大多数人会告诉我使用 wine。我试过。但我听说 windows 病毒可以通过 wine 影响 Linux 系统。所以我对此感到有点不舒服。
您能告诉我一种在 Linux 中从 Windows 制作 exe 文件的方法吗?
答案1
如果您使用 C 或 C++ 编写程序,则可以使用 MingW64 编译 Windows 程序。(它与 gcc 非常相似,但支持 MSVC 语法扩展并输出 .exe 文件。)人们所熟知的几个 Windows 应用程序项目实际上是在 Linux 上使用 MinGW64 构建的,通常使用 Qt 作为图形界面。
我思考Zig 编译器也许能够做到这一点(它接受 C)。
您可能不需要为 Java 做任何特殊的事情,因为 Java 应用程序不直接在操作系统上运行,而是在 Java 运行时 (JRE) 上运行,并且 Windows 和 Linux 都有 JRE - 您在哪个操作系统上编译它并不重要,无论如何,.jar 都是相同的。
类似地,.NET 运行时在 Linux 上可用(尽管 WinForms 不能在 Linux 上运行 - 但我见过使用 gtk-sharp 编写的程序在 Windows 上运行)。
大多数 Windows 病毒都无法进入运行 Wine 的 Linux 系统:它没有任何典型的 Windows 网络服务(例如,即使您有 Samba,它也不会受到绝大多数 Windows SMB.sys 漏洞的影响,因为它是一个不同的程序);它没有 Windows 网络浏览器或 Windows 电子邮件应用程序;并且我假设您不打算双击在 USB 记忆棒中找到的任何随机 .exe。
答案2
您可以使用跨平台系统,如 Java(已经是跨平台的)、Qt(用于 C/C++)或 Xamarin(或其他 C# 跨平台框架)。它们可以在 Linux/Windows 上为其中任何一个编译。您还可以在两个系统中仅使用 clang/gcc,并仅更改系统所需的变量或使用跨平台库(例如,dearimgui 用于 GIU 创建)