Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何生成可以在Unix和Linux上运行的可执行文件?_C++_C_G++ - Fatal编程技术网

C++ 如何生成可以在Unix和Linux上运行的可执行文件?

C++ 如何生成可以在Unix和Linux上运行的可执行文件?,c++,c,g++,C++,C,G++,我正在使用g++(在linux下)编译一段c代码。编译后的可执行文件在linux上运行良好。但它不在unix(SunOS)上运行。如何使编译后的文件同时在Unix和Linux上运行?谢谢。不仅仅是二进制生成,您的链接器还将链接系统使用的库。这将在不同的linux发行版上有所不同!如果你真的想创建一个独立于平台的二进制使用java或者使用LLVM编译C++程序。 当您将C代码编译为llvm字节码时,可以使用lli对其进行解释。您可以向lli提供您需要的所有本机.so文件,它将能够执行代码。我对结果

我正在使用g++(在linux下)编译一段c代码。编译后的可执行文件在linux上运行良好。但它不在unix(SunOS)上运行。如何使编译后的文件同时在Unix和Linux上运行?谢谢。

不仅仅是二进制生成,您的链接器还将链接系统使用的库。这将在不同的linux发行版上有所不同!如果你真的想创建一个独立于平台的二进制使用java或者使用LLVM编译C++程序。
当您将C代码编译为llvm字节码时,可以使用lli对其进行解释。您可以向lli提供您需要的所有本机.so文件,它将能够执行代码。我对结果非常满意。

是一个实用程序,它允许Linux二进制文件在各种其他类似Unix的平台上运行,包括Solaris。

POSIX.1标准保证了源代码niveau的兼容性。这是每一个使用POSIX.1API编写的程序都保证在任何POSIX平台上编译和运行。POSIX没有也从来没有保证二进制文件在不同平台之间是可移植的,即使它们都是兼容的

不要假设您可以在不同的平台上执行相同的二进制文件。虽然有一些工具包提供不同级别的仿真,但这并不总是有效的


对于执行Linux二进制文件的特殊情况,有一些解决方案,如针对Solaris的lxrun或内置系统调用转换层。在FreeBSD上将Linux映射到FreeBSD系统调用。

除非在SunOS上有Linux仿真器,否则不能。它们不是二进制兼容的。不再有单一的“UNIX”系统,而是有一大系列UNIX和类UNIX系统。例如,在UNIX家族中,我们有BSD变体、Solaris(SunOS已经死了并埋葬了十多年),甚至还有MacOSX。在类UNIX系统中,最广为人知的是Linux,Linux有上百种变体。正如你所看到的,没有单一的“UNIX”系统,还有底层的硬件平台。旧的SunOS只能在SPARC系统上运行,BSD可以在许多不同的平台上运行。OSX过去仅为PowerPC,但后来是32位x86,现在仅限于64位x86。而Linux在数百个平台和处理器组合上运行。总之,仅仅因为你可以在一个“UNIX-Y”平台上编译C或C++程序,并不意味着它能够在另一个平台上运行。谢谢Clambake和其他所有的回复者。请不要这样做。lli代码高度依赖于平台,因为它不会脱离内核数据结构的布局,例如
struct stat
。即使在不太可能的情况下,您的代码能够在目标平台上运行,但当您尝试执行一些复杂的操作(如使用
open(2)
打开文件)时,它也可能会崩溃,因为标志位的顺序取决于平台。