用于 C/C++/java 的平台无关代码,无需额外的包

Posted

技术标签:

【中文标题】用于 C/C++/java 的平台无关代码,无需额外的包【英文标题】:Platform independent Code fro C/C++/java without additional package 【发布时间】:2014-03-24 11:19:51 【问题描述】:

是否可以在 C/C++/Java 中制作可以独立于平台的服务器/客户端代码?

它不应该需要在系统上安装任何额外的包(如无 JVM 要求),只需运行可执行文件即可(如果可能在 Windows/Linux/Mac 上)。

如果不能,您能告诉我任何其他方式(可能是语言)来实现这一目标吗? 谢谢你

【问题讨论】:

仅适用于 Java @cyberworm 但是 Java 需要安装 JVM,我如何在不需要在该机器上安装 JVM 的情况下完成它。 在 c++ 中有 QT 框架,它允许您编写几乎独立于平台的代码,但我不确定它是否需要为最终用户提供任何软件包 看看QtNetwork。您将使用静态链接在每个平台上构建。附:您不能在每个平台上运行 same 可执行文件。这不是“跨平台”的意思。 【参考方案1】:

只是要运行的可执行文件(如果可能在 Windows/Linux/Mac 上)。

这可以通过 Qt C++ 编写可移植代码并使用静态链接绑定 DLL 来完成。这样做的一个缺点是您最终会得到一个更大的可执行文件。 Java 使用 JVM,它像您所说的那样将其排除在外。

应该注意,您编译它的平台将是可执行文件的唯一目标。所以在 Windows 上编译的程序不能在 Ubuntu 上运行(你需要为此编译一个单独的版本 - 除非你可能在 Wine 中安装 .exe)。

【讨论】:

你能告诉我它可能会变得多大,因为我想做一个瘦客户端。即使在静态绑定之后也必须进行编译? @user1575044 这取决于您将拥有多少代码以及拥有多少依赖项。我不能给出确切的数字,但对于一个小型界面应用程序,它应该在 3-10mb 左右。是的,你设置了静态链接,然后编译它。【参考方案2】:

简单的回答:不! (如前所述:如果您不想为每个平台单独编译)

您要么需要面向平台的代码,要么需要中间件,例如带有 Java 字节码的 JVM 或带有 MSIL(Microsoft 中间语言)的 .NET Framework。 我猜 node.js 也可以被视为一个中间件。

由于 .NET Framework 在 linux/mac 中不可用,我建议使用 Java。

如果您在 C++ 和 Qt 中使用静态绑定,或者将中间件添加到二进制文件中。我仍然建议使用现有的广泛传播的中间件:Java。

【讨论】:

静态链接和Qt怎么样? 像 Launch4j 或 exe4j 这样的 Wrappers 会完成这项工作。 我认为这不是一个正确的答案。可能存在跨平台并提供所需功能的 3rd 方库(甚至不是 Qt 之类的怪物)。 @Martin 如果我在不同的操作系统上编译 C 程序,比如在 Windows 上,那么形成的 .exe 将在所有 Windows 上工作? 它应该适用于所有MS Windows,通常在旧窗口上构建的exe必须与新版本兼容

以上是关于用于 C/C++/java 的平台无关代码,无需额外的包的主要内容,如果未能解决你的问题,请参考以下文章

JavaJava_12 Eclipse

AWT和Swing的简记

Java概述

为啥 Java 被称作是“平台无关的编程语言”?

SonarQube代码质量管理平台安装与使用

直面Java 第003期