将GCC的C ++应用程序静态编译为二进制文件

时间:2012-10-29 08:14:10

标签: c++ windows unix gcc compiler-construction

如何在面向unix的Ubuntu计算机上使用GCC静态编译应用程序?我如何针对具有不同版本的GLIBC的32位/ 64位机器和机器,或者unix C ++应用程序通常依赖什么?我想以二进制形式分发这个应用程序并在unix机器上运行它,而不需要从源代码编译。

同样,我可以compile this app on Windows such that it will run on unix吗?

2 个答案:

答案 0 :(得分:3)

要编译它以便它将在Linux上运行,就像这样编译它:

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

这应该适用于大多数Linux版本,以及一些版本的FreeBSD。

这与libstdc ++没有静态链接,但这可能是更好的方法。根据经验,您应该动态链接OS c lib以允许您的应用程序工作,即使系统调用abi更改。

您可以使用'-m32'强制从64位计算机进行32位编译,作为标志之一。它将编译模式设置为32位。

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

答案 1 :(得分:2)

这是你可以创建静态编译的32位可执行文件的方法,它可以在任何已知的Linux上运行,而不会抱怨缺少的库:

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

这样做的一个缺点是可执行文件的最小大小至少为600 KB。

注意:如果您遇到编译错误,请务必安装软件包g++-multilib