c++ - 两台计算机必须有什么共同点才能运行相同的可执行文件?

标签 c++ compilation operating-system cross-platform cross-compiling

我正在开发一个跨平台应用程序,我需要确定机器 B 是否能够运行在机器 A 上编译的应用程序。

我正在使用 Qt,并且我已经了解我需要将 Qt 库与应用程序打包在一起,或者静态链接到 Qt 本身。

我还了解到,在 Windows 上编译的东西无法在 Linux 上运行。

但是,还有一些其他 vector 我不确定它们的重要性有多大。以下是我目前的理解总结:

影响可移植性

  • 操作系统(Windows、Mac、Linux)
  • 第三方库的可用性(Qt、静态与动态链接等)

可能会影响可移植性

  • Linux 风格(Ubuntu、Red Hat、Fedora)
  • 架构(32 或 64 位)
  • 操作系统版本(Windows 7 与 Windows XP、Rhel5 与 Rhel6)
  • 指令类型(i386、x64)

可能影响便携性的项目中,哪些确实会影响便携性?有没有我遗漏的?

最佳答案

全部。至少有可能。

如果两台不同的机器没有二进制兼容性(例如 它们运行在不同的架构上,或者接口(interface) 不兼容的系统),那么就不可能创建 一个可以在两者上运行的二进制文件。 (或者...运行吗 Linux 上 Wine 下的 Windows 程序算不算?)

否则,视情况而定。您提到第三方库:如果 它们是动态加载的,它们必须在那里,但是有 始终静态链接,并且可能有多种部署方法 动态库,这样它就会在那里。

32 位与 64 位是架构上的差异:32 位 程序将无法在 64 位环境中运行,反之亦然。 但大多数现代系统都会提供这两种环境 如果它们位于 64 位机器上。

操作系统的风格和版本等问题更加复杂。 当然,如果您使用操作系统最近添加的任何功能, 您将无法在具有之前操作系统的计算机上运行 添加。否则:主要原因是系统级别低 动态加载库是为了支持转发和 向后兼容性;我听说这并不总是有效 但我怀疑任何问题都涉及一些较罕见的问题 功能。 (这有限制。现代 Windows 程序 不能在Windows95下运行,反之亦然。)

还有一个问题是各种可选的是否 软件包已安装。 Qt 需要 Linux 下的 X Windows 或 索拉里斯;我曾在很多 Linux 和 Solaris 机器上工作过,其中 它没有安装(甚至没有显示器 设备)。

还有一个问题是它能否正常运行。它可能 在比您测试的机器更小、更旧的机器上运行 它,但它最终可能会疯狂地分页,以至于它 变得无法使用。

关于c++ - 两台计算机必须有什么共同点才能运行相同的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17619985/

相关文章:

Python os.stat 和 unicode 文件名

c - 从/proc/pid/stat中的tty_nr属性获取次设备号

c - C 中的系统函数调用

c++ - 将字符串 vector 移到另一个字符串 vector

c++ - 在 C++ 中实现复数类

c++ - 使用 libsndfile 获取音频持续时间

php - 可以使用 HipHop PHP 构建 php 扩展吗?

java - 线程 "main"java.lang.NoClassDefFoundError : HelloWorld 中的异常

c++ - 发布版本的应用程序抛出 c1083 无法打开包含文件错误

compilation - 不同编译语言的速度是否不同? (例如 Java 与 C++)