哪些编程语言可以创建跨平台的本地可执行文件?

17

我很失望地发现Java缺乏可接受的解决方案来创建可以通过双击运行的程序。除了.NET适用于Windows之外,还有哪些现代高级编程语言可以编写代码,并且能够编译为各种平台的本机二进制文件在每个平台上运行(Windows、Linux、OSX(可选))。

假设我想使用Python编写代码,那么是否有一种协调一致的方式可以分发我的软件,而不需要用户执行任何特殊操作即可运行?我想为计算机小白编写和分发软件,但Java的这一点让我非常烦恼。

澄清:当我说跨平台时,我的意思是有办法使用不同的编译器为每个目标系统编译我的源代码。我不需要一次性编译的解决方案……即使我需要为每个目标平台编译并处理代码问题,我仍希望用户能够获得简单的软件体验。


6
Java程序可在Windows、Linux和Mac操作系统上通过双击运行。 - OscarRyz
2
编辑:你做错了。跨平台并不意味着盲目编码。虽然WORA适用于小型应用程序,但对于每个目标平台,较大的应用程序确实需要进行调整。优秀的例子是IDE,例如“Netbeans、Eclipse、IntelliJ IDEA(或如果你想要一个街头应用程序参考,可以选择limewire)”,您可以访问每个网站并找到一个可安装的,并且可以由电脑白痴运行,但是你需要比一个简单的HelloWorld.jar更努力地工作。 - OscarRyz
1
试试Rust吧,你会喜欢的!请看下面我详细的回答。 - Harindaka
9个回答

9

Go 添加到列表中。

要在 Go 中启用交叉编译,必须重新编译运行时和标准库,方法如下:crosscompile.sh

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

2
虽然我在这里推荐了Rust作为其中一种选择,但不久之后我便爱上了Go。我会选择Go而非Rust,因为它的GC使生活更轻松,但这只是我的个人看法。顺便点个赞。 - Harindaka

8

C语言是你能接近的最佳选择。

提供最佳跨平台执行的语言将会是那些不运行本地代码的语言,比如Java平台和.NET框架。你也可以使用解释型而非编译型语言。

我一直在尝试使用Mono和C#与Winforms。到目前为止,这已经证明是一个相当好的组合。在Windows中,可执行文件可以直接双击运行,或者创建一个快捷方式进行双击运行。在Linux中,可执行文件可以从执行小脚本的图标运行,用户体验基本相同。

我认为你可以期望Python有类似的体验。


你有没有和我一样的Java经验,或者和你用C#的经验类似? - JT.
1
使用C#进行开发。Mono团队创建了一个基本上与Winforms兼容的库,因此,任何以前进行过这种编程的人在Mono中都可以感到非常自在。但是如果你熟悉Java,我想不出为什么你不能创建可以直接从桌面图标运行的程序,无论是在Linux还是Windows上。 - Robert Harvey

6

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 吧!


1
在我写完这个答案后不久,我花时间学习了 Go 语言。如果你不是开发系统应用程序,我认为它在生产力方面要好得多。对于我在整个职业生涯中遇到的大约 99% 的服务器端使用情况,我会选择 Golang,而不是 Rust。学习两种语言都没错:D - Harindaka
学习一门编程语言的容易程度并不等同于开发无缺陷软件的容易程度。(汇编语言就是一个例子)。请参见 https://fasterthanli.me/articles/some-mistakes-rust-doesnt-catch (比较 Go 和 Rust)。 - tejasvi88

5

C++

以Google Chrome为例,它是一个新的网络浏览器,是本地多平台应用程序的优秀示例,而且它是用C++编写的。

当然,正如你所说,他们必须为每个目标平台解决代码问题,但它肯定有效!


2
使用QT编写跨平台的C++应用程序非常有成就感。 - user1115652

4
如果你习惯使用Delphi,那么Lazarus可以提供类似的环境,并允许跨平台编译。不幸的是,你不能只是把你的VCL组件拖放进来,因为它们往往是针对Windows特定/中心的。一些VCL组件提供商也提供LCL版本。

1

我在Windows上使用Borland的Delphi编译器有非常好的体验,而且在Wine上运行得非常完美。Delphi默认会将所有内容编译成一个exe文件。只需避免使用Win32-voodoo库即可。

另一种跨平台编译的选择是C\C++、Eclipse和GCC,您还可以编译不同于i386架构的程序。


1

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

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


Cython很有趣。二进制文件比golang二进制文件小得多。 - Sridhar Sarnobat

0

正如其他人所说,对于您所询问的问题,C语言可能是最好的选择,因为它可以在几乎任何平台上编译,实质上它就是一种“高级汇编语言”。

话虽如此,为了实现您想要的目标,使用一种托管语言可能是最好的选择。像Windows/OSX上的Silverlight(以及Linux上Mono的Moonlight)之类的东西可能是最好的选择,并且它还提供了“一次编码,到处部署”的解决方案。

Adobe Flash/Flex/Air可能是另一个选择,它将为您提供“一次编译,到处部署”的功能,我知道这不是您所要求的,但它是实现简单用户体验目标的最佳选择。


-2
JavaScript一直以来都是一种解释性语言,跨平台,源代码可以通过解释器直接转换为机器码。任何非计算机科学背景的用户都可以通过双击而无需进行任何额外的配置来使用它。

可以通过双击来使用它 - 如果计算机设置了JavaScript解释器来执行文件,那么与Java运行时要求没有太大区别。 - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接