【问题标题】:What languages allow cross-platform native executables to be created? [closed]哪些语言允许创建跨平台的本机可执行文件? [关闭]
【发布时间】:2010-05-01 01:39:46
【问题描述】:

我很沮丧地发现 Java 缺少一个可接受的解决方案来创建通过双击运行的程序。除了适用于 Windows 的 .NET 之外,我还可以使用哪些现代和高级编程语言编写代码,这些代码可以针对各种平台进行编译并在每个平台中作为本机/二进制文件运行(Windows、Linux、OSX(可选))

例如,假设我想用 python 编写代码,有没有一种内聚的方式可以分发我的软件,而不需要用户做任何特别的事情来让它运行?我想为不懂电脑的人编写和分发软件,而 Java 在这方面真的很痛苦。

澄清:当我说跨平台时,我的意思是我可以通过多种方式为每个目标系统使用不同的编译器来编译我的源代码。我不需要一次编译的解决方案……我只想为软件用户提供简单的体验,即使我需要编译它并为每个目标平台解决代码问题。

【问题讨论】:

  • Java 程序可以在 Windows、Linux 和 Mac 上双击运行。
  • edit 你做错了。跨平台并不意味着盲目编码。虽然 wora 适用于小型应用程序,但大型应用程序确实需要针对每个目标平台进行调整。优秀的例子是 IDE,它可以双击安装和运行,例如“Netbeans, Eclipse, IntelliJ IDEA(如果你想要一个 street app 参考,或者是limewire)你可以去每个网站然后你'会找到一个可安装的并且可以由计算机文盲运行但是你需要比一个简单的HelloWorld.jar更努力地工作
  • 试试 Rust。你会喜欢的!请参阅下面的详细答案。

标签: programming-languages executable


【解决方案1】:

Go 添加到列表中。

要在 go 中启用交叉编译,您必须 re-compile the runtime and standard library:

cd /usr/local/go/src
for os in linux windows darwin; do
  GOOS=${os} GOARCH=amd64 ./make.bash —no-clean
done

然后在编译前指定目标操作系统:

GOO=linux go build yourprojecthere

【讨论】:

  • 虽然我在这里推荐了 Rust 作为答案之一,但我很快就爱上了 Go。我会选择 Go over Rust,因为它的 GC 让生活更轻松,但这只是我。顺便说一句。
【解决方案2】:

C 是您将得到的最接近的值。

提供最佳跨平台执行的语言将是那些运行本机代码的语言,例如 Java 平台和 .NET 框架。您还可以使用解释语言,而不是编译语言。

我一直在用 Winforms 试验 Mono 和 C#。到目前为止,它已被证明是一个非常好的组合。在 Windows 中,可执行文件可以通过直接双击可执行文件来运行,或者为其创建一个可以双击的快捷方式。在 Linux 中,可执行文件可以通过执行小脚本的图标运行,用户体验基本相同。

我认为您可以期待使用 Python 获得类似的体验。

【讨论】:

  • 与我的 Java 或 C# 类似的体验?
  • 用 C# 挖掘。 Mono 的人创建了一个基本上与 Winforms 兼容的库,因此以前做过这种编程的任何人都可以在 Mono 中轻松自如。但是,如果您对 Java 感到满意,那么我没有理由认为您不能创建直接从 Linux 或 Windows 桌面上的图标运行的程序。
【解决方案3】:

Rust 应该在这个列表中。

  1. https://www.rust-lang.org/en-US/ 安装 Rust 工具链
  2. cargo new "my_first_rust_progam" --bin
  3. cd my_first_rust_progam
  4. cargo run

不,真的是这样。最终用户无需预安装运行时或框架。真的就是这么简单。您刚刚编写并编译了一个很小的“hello world”源到本机二进制文件并执行了它。

https://doc.rust-lang.org/ 有很好的文档可以帮助您入门。立即学习 Rust!

【讨论】:

  • 写完这个答案后不久,我就花时间学习了 Go。如果您不开发系统应用程序,我会说它在生产力方面更好。对于我整个职业生涯中遇到的大约 99% 的服务器端用例,我只会使用 Golang 而不是 Rust。两个都学。你不会出错的:D
  • 易于学习语言!=易于开发无错误软件。 (例如:装配)。请参阅fasterthanli.me/articles/some-mistakes-rust-doesnt-catch(比较 Go 和 Rust)
【解决方案4】:

C++

以谷歌浏览器为例。它是一个新的网络浏览器,也是原生多平台应用程序的一个很好的例子,它是用 C++ 编写的。

当然,他们必须按照你说的“为每个目标平台解决代码问题”,但它确实有效!

【讨论】:

  • 使用 QT,编写一个跨平台的 c++ 应用程序是相当有益的。
【解决方案5】:

如果您习惯 Delphi,那么Lazarus 可以提供类似的环境,但允许跨平台编译。不幸的是,您不能只将 VCL 组件放入其中,因为它们往往是特定于 Windows 的/以 Windows 为中心的。不过,一些 VCL 组件提供商也提供 LCL 版本。

【讨论】:

    【解决方案6】:

    我对在 Windows 中编译的 Borland 的 Delphi 有很好的体验,它使用 Wine 完美运行,默认情况下 Delphi 将所有内容编译在一个 exe 中。只是避免使用 Win32-voodoo 库。

    交叉编译的另一个选项是 C\C++、eclipse 和 gcc,你也可以编译 i386 不同的架构

    【讨论】:

      【解决方案7】:

      将 Java 程序“编译”到不同的平台是可能的,而且相当容易。您可以将它们转换为可执行的 .jar 文件,也可以使用 JSmooth 等程序。

      如果您需要能够为不同的平台编译它,您可以使用 Perl 之类的解释性语言并将其编译为 C 代码。由于 C 可以在目标平台上轻松编译,因此用户不需要解释器。

      【讨论】:

      • Cython 很有趣。二进制文件比 golang 二进制文件小很多
      【解决方案8】:

      正如其他人所说,确切地说,您最好的选择是 C,它几乎可以在任何平台上编译,因为它实际上是一个“高级汇编程序”。

      也就是说,要实现您想要的目标,托管语言将是您的最佳选择。像适用于 Windows/OSX 的 Silverlight(以及适用于 Linux 上的 Mono 的 Moonlight)将是您的最佳选择,此外它还将提供一次代码部署到任何地方的解决方案。

      Adobe Flash/Flex/Air 将是另一种选择,它可以让您在任何地方部署一次即可编译,我知道这不是您所要求的,但它接近实现简单用户体验的目标。

      【讨论】:

        【解决方案9】:

        JavaScript 总是。它是一种解释型语言,跨平台,源代码使用解释器直接转换为机器码。任何非计算机科学背景的用户只需双击即可使用,无需任何额外配置。

        【讨论】:

        • 可以通过双击使用它如果计算机有一个 Javascript 解释器来执行文件。与 Java 运行时要求没有太大区别。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 2014-03-13
        • 1970-01-01
        • 2017-11-08
        • 2011-10-21
        • 2011-02-21
        • 1970-01-01
        相关资源
        最近更新 更多