如何在 Debian 下编译 Solaris 可执行文件?

如何在 Debian 下编译 Solaris 可执行文件?

我在大学计算机上有一个 SSH 帐户,只能使用 gcc 4.4.7 进行编译,它与我的 C++ 11 代码不兼容(我无权安装/更新软件)。我的计算机上有 Debian,但我在 Debian 中编译的程序与 Solaris 不兼容。

我可以在 Debian 下编译我的源代码以使其在 Solaris 上工作吗?或者我的问题有什么解决办法吗?

答案1

您可以在 Debian 计算机上安装 VirtualBox(或其他一些虚拟机软件),并在。 Oracle(供应商)提供下载

如果大学的计算机兼容(基于x86,类似版本),则可以在本地编译并在另一台计算机上使用可执行文件。

答案2

正如托马斯·迪基(Thomas Dickey)所发布的,你想要什么,是一个交叉编译器

他们不是难的做,但它们的设置和正确保持设置非常乏味,因为有一个很多为了构建正确的可执行文件,必须考虑对目标系统的依赖关系。

其中一些依赖项是什么?就在我的头顶上:

  1. 首先,您的目标系统可能是A托管环境因此,您的交叉编译器需要提供可执行的启动代码/二进制文件,以允许目标系统真正到达调用您的main()函数的位置。
  2. 有很多的实现定义的有关目标系统的详细信息,例如“多大long”。这些可能不同,所以你需要,因为缺乏更好的词 - 目标执行。一般来说,这意味着至少全部目标系统的头文件是“实现的一部分”。确定哪些是您需要的,哪些是您不需要的,充其量是一项乏味的任务。所以把它们全部抓住,对吗?好吧,这增加了您必须担心的依赖项的数量。
  3. 所以现在你可以编译 - 但你不能关联没有目标系统库(这与上面的#1有关,但即使更多的是需要的)。虽然理论上您可以仅与目标系统链接静止的库并且没有目标系统动态的图书馆,没有全部当您尝试在目标系统上运行它时,您无法真正确定交叉编译器生成的二进制文件不会因“缺少符号”错误而失败。

因此,您需要目标系统的头文件、库和启动二进制文件/代码来创建交叉编译器 - 一旦设置完毕,您必须维持它 - 如果目标系统的修补方式影响了交叉编译器,则需要在编译器中复制这些更改。您如何确定补丁“123456”或 RPM“abc”影响您的交叉编译器?

我可能错过了很多。

很明显,为什么没有人会费心使用交叉编译器,因为目标系统是这样的简单的在 x86 硬件上创建 Linux/Solaris/Windows/BSD 等实例,甚至为什么当目标系统比较困难时(例如 SPARC 上的 Solaris),几乎每个需要针对该目标进行编译的人都只购买一些低端兼容的用于编译的硬件。

相关内容