用于 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 的平台无关代码,无需额外的包的主要内容,如果未能解决你的问题,请参考以下文章