如何使用 gcc4 构建依赖于 MSYS 的程序?
Posted
技术标签:
【中文标题】如何使用 gcc4 构建依赖于 MSYS 的程序?【英文标题】:How to build MSYS-dependent program with gcc4? 【发布时间】:2015-08-07 19:26:19 【问题描述】:MinGW 带有一个为制作 Windows 程序而配置的 gcc。例如,它不会编译和链接这个小程序:
#include <unistd.h>
int main(void)
uid_t u = getuid(); // no such function in Microsoft library
return 0;
此程序将编译并与 MSYS 编译器链接,因为 MSYS 库具有此功能。这就是例如 GNU Coreutils 程序 id
如何获取并打印用户 ID,以及 MinGW 中的 ls -l
如何打印用户和组 ID 等等。
唯一的问题是,这个 MSYS 编译器是旧的:gcc 3.4.4。
是否有一种很好的“规范”方式将 MinGW 的 gcc 4.5.2 指向正确的头文件和库以编译基于 MSYS 的程序?
或者根本不推荐这条路线;最好从头构建一个 MSYS gcc4,用 MSYS gcc3 引导?
【问题讨论】:
你看到我的回答了吗?对你有帮助吗? 【参考方案1】:恐怕答案是“您可能不想这样做”(因此有关它的信息很少)。 MSYS 环境的目的是提供用于构建 MinGW 程序的实用程序。如果此目的不需要给定程序,则不需要为 MSYS 构建它。
也就是说,MinGW 有效地提供了一个交叉编译工具链,其中目标系统是基于微软库的 Windows 上的可执行环境。交叉编译工具链本身的实用程序是基于 MSYS 构建的,但 MSYS 不适用于交叉编译的程序。
需要更多类 Unix 环境的应用程序(如 MinGW 中包含的实用程序所享受的环境)可以使用 Cygwin。无论如何,MSYS 是 Cygwin 的一个分支。与 Cygwin 一样,MSYS 提供了自己的库。例如,不仅有getuid
,而且如果你在一个文件上调用stat
,st_uid
和st_gid
字段是根据文件安全描述符中的信息填充的,而微软版本的函数使用MinGW 程序会将这些字段保留为零。 MSYS 必须被视为与 MinGW 不同的目标,如 Cygwin;将适用于 MinGW 的程序转换为 MSYS 是一种移植形式。
在我的例子中,有问题的程序已经以 Cygwin 为目标,因此支持 MSYS 作为目标可能没有什么意义,除非 MSYS 项目想要将该程序作为 MinGW 环境的一部分。
【讨论】:
以上是关于如何使用 gcc4 构建依赖于 MSYS 的程序?的主要内容,如果未能解决你的问题,请参考以下文章