我正在开发一个跨平台的应用程序,我需要确定机器B是否能够运行在机器A上编译的应用程序。
我正在使用Qt,我已经明白我需要将Qt库与应用程序打包或静态链接到Qt本身。
我也明白在Windows上编译的东西不能在Linux上运行。
然而,还有一些其他的载体,我不确定它们的重要程度。以下是我目前理解的摘要:
可能影响可移植性项目,实际上有哪些?有没有我错过的?
答案 0 :(得分:2)
全部。至少可能。
如果两台不同的机器没有二进制兼容性(例如 它们运行在不同的体系结构或接口上 不兼容的系统),那么就不可能创造出来 一个将在两者上运行的二进制文件。 (或者...正在运行 Wine on Linux下的Windows程序计数?)
否则,取决于。你提到第三方库:如果 他们是动态加载的,他们必须在那里,但有 总是静态链接,可能有部署方式 动态库,以便它就在那里。
32位与64位是体系结构的差异:32位 程序不会在64位环境中运行,反之亦然。 但是大多数现代系统都会使两种环境都可用 如果他们在64位计算机上。
操作系统的风格和版本等问题更复杂。 如果您使用最近添加到操作系统的任何功能,当然, 您将无法在具有操作系统的计算机上运行 添加。否则:低级系统的主要原因 动态加载库是为了支持转发和 向后兼容;我听说它并不总是有效, 但我怀疑任何问题都涉及一些罕见的问题 功能。 (这是有限制的。现代Windows程序 将不在Windows95下运行,反之亦然。)
还有一个问题是各种可选项 包已安装。 Qt在Linux或Linux下需要X Windows 的Solaris;我曾经在很多Linux和Solaris机箱上工作过 它没有安装(甚至没有显示器 装置)。
还有一个问题是它是否可以接受。有可能 在比您测试的机器更小的旧机器上运行 它,但它可能最终像疯了一样分页到它的地步 变得无法使用。
答案 1 :(得分:0)
如果在64位处理器上编译应用程序,则默认情况下不会在32位处理器上运行。但是,您可以将选项传递给编译器,以使其编译代码以在32位处理器上运行。例如,如果您在64位计算机上使用GCC,如果通过-m32
,它将编译32位代码。默认情况下,32位代码可以在64位计算机上运行。
<强>来源强>
答案 2 :(得分:0)
不同版本的Linux或操作系统版本可能具有不同的系统库。例如,GetModuleFileNameEx
功能仅适用于Windows XP及更高版本。只要你看一下你使用的功能,它就不应该是一个太大的问题了。
x64架构向后兼容x86(“32位”),因此为x86编译的程序将在x64机器上运行,但反之亦然。请注意,还有其他不常见的体系结构,例如ARM和PowerPC。
答案 3 :(得分:0)
我可以立即想到三件干扰便携性的事情。但是如果你的代码是两个系统都能理解的文件格式,两个系统都能理解的指令集,并且只能让两个系统理解系统调用,那么你的代码应该可以在两个系统上运行。