运行/编译可执行Linux与Solaris

时间:2011-02-15 21:02:51

标签: c++ linux solaris binary-compatibility

如果我有在Solaris 8和10下编译的代码,现在有一个供应商想在Linux下使用我的bin / exe。可能存在兼容性问题吗?

我很确定我需要在Linux操作系统下编译/链接才能100%工作但我只是想知道是否有人可以告诉我为什么它在Linux上无法工作,即使exe已经一切都没有任何动态,因为它不需要任何进一步的运行它。除非我们讨论运行时库,否则如果存在不匹配可能会导致exe失败。

2 个答案:

答案 0 :(得分:8)

您必须在Linux上重新编译您的应用程序。

与Solaris相比,Linux是一个完全不同的运行时。即使您已静态编译应用程序,也会对这两个操作系统中的内核进行接口/系统调用。处理器架构也可能不同,例如SPARC与X86。

Solaris和Linux都支持大多数标准C和Posix API,因此如果您没有使用Solaris独有的任何API,那么在Linux上重新编译通常不是什么大不了的事 - 但是您应该彻底地测试所有内容,并且请注意任何endianess,以及潜在的64位与32位问题。

答案 1 :(得分:2)

我认为其他不允许Solaris二进制文件在Linux上运行的东西是:

  1. 硬件架构:
    1.1 Solaris通常在Sun自己的SPARC机器上运行,尤其是8-10也可以在Intel架构上运行; 1.2 Linux通常在Intel机器上运行(尽管它可以在Sparc机器上运行)。

  2. 编译器:
    2.1 Solaris 8使用Sun自己的编译器(Sun WorkShop 6+)和标准库实现(因此您将拥有不同的库名,ABI不兼容性等)。 Solaris 10实际上带有gcc但你可能没有使用它(我认为你只在Solaris 8上构建);
    2.2 Linux使用g ++,与上面相同的库名,ABI不兼容性和等等。