静态地将带有GCC的C 应用程序编译为二进制

Statically compile a C++ app with GCC into a binary

本文关键字:应用程序 编译 二进制 GCC 静态      更新时间:2023-10-16

如何使用针对Unix的Ubuntu机器上的GCC静态编译应用程序?我将如何针对具有不同版本的GLIBC或任何Unix C 应用程序通常取决于的32位/64位计算机和机器?然后,我想以二进制形式分发此应用程序,然后在Unix机器上运行它,而无需从源头进行编译。

同样,我可以在Windows上编译此应用程序,以便它可以在Unix上运行?

对其进行编译,因此它将在Linux上运行,就像这样:

g++ -o myapp myapp-a.cop myappb.cop -L mylib1

这应该在大多数版本的Linux和一些版本的FreeBSD上使用。

这在libstdc 上没有静态链接,但这也许是更好的方法。根据经验,您应动态地链接到OS C LIB,即使SYSCALL ABI更改,您的应用程序也可以正常工作。

您可以将32位从64位机器中加以编译为" -m32",因为您的旗帜有一个。它将汇编模式设置为32位。

至于在Windows上编译:是的。你能行的。它称为交叉编译。您首先需要编译一个针对Linux的工具链。

这是您可以创建静态编译的32位的方法,该如何可执行,该可执行文件应在任何已知的Linux上使用,而无需抱怨丢失的libs:

g++ -m32 -static -o myprog myprog.cpp

一个缺点是,可执行文件的最小尺寸至少为600 kb。

注意:如果您遇到编译错误,请确保安装了包g++-multilib