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

标签 c++ windows unix gcc compiler-construction

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

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

最佳答案

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

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

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

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

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

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

关于c++ - 使用 GCC 将 C++ 应用程序静态编译为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13117962/

相关文章:

c++ - 覆盖变量的链表问题

windows - 在 3 个不同的子目录中创建 2 个子目录

java - 使用 maven 的 RPM 包

c++ - 指针、 vector 列表 = 大量困惑

c++ - `std::timed_mutex` 的有效用例?

c++ - 如何将 std::string (YYYY-MM-DD) 解析为 COleDateTime 对象?

windows - 如何判断 Win32_NTLogEvent InsertionString 是否存在?

c++ - Windows,UDP 数据包静默丢弃

java - 如何获取文件的最后更改时间(Unix + Java)

node.js - 如何将元数据添加到 mac/linux 上的文件夹