1

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

同样,我可以在 Windows 上编译这个应用程序以便它在 unix 上运行吗?

4

2 回答 2

3

要编译它以使其在 Linux 上运行,只需像这样编译它:

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

这应该适用于大多数版本的 Linux,也适用于某些版本的 FreeBSD。

这不会静态链接到 libstdc++,但这可能是一个更好的方法。根据经验,即使系统调用 abi 发生变化,您也应该动态链接到 OS c lib 以允许您的应用程序工作。

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

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

于 2012-10-29T08:24:20.760 回答
2

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

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

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

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

于 2012-10-29T08:45:29.877 回答