如何在面向unix的Ubuntu计算机上使用GCC静态编译应用程序?我如何针对具有不同版本的GLIBC的32位/ 64位机器和机器,或者unix C ++应用程序通常依赖什么?我想以二进制形式分发这个应用程序并在unix机器上运行它,而不需要从源代码编译。
同样,我可以compile this app on Windows such that it will run on unix吗?
答案 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
。