MinGW配备了gcc,配置用于制作Windows程序。例如,它不会编译和链接这个小程序:
#include <unistd.h>
int main(void)
{
uid_t u = getuid(); // no such function in Microsoft library
return 0;
}此程序将编译并链接到MSYS编译器,因为MSYS库具有此功能。例如,GNU程序id可以获取和打印用户ID,以及ls -l如何在MinGW中打印用户ID和组ID等等。
唯一的问题是,这个MSYS编译器是旧的: gcc 3.4.4。
有没有一种很好的、“规范的”方法可以将MinGW的gcc 4.5.2指向正确的标题和库来编译基于MSYS的程序?
或者根本不推荐这个路由;最好从头开始构建一个MSYS gcc4,用MSYS gcc3引导它?
发布于 2015-08-07 21:33:59
恐怕答案是“你可能不想这么做”(因此有关它的信息很少)。MSYS环境的目的是为构建MinGW程序提供实用程序。如果给定的程序不需要用于此目的,则不需要为MSYS构建程序。
换句话说,有效地提供了交叉编译工具链,其中目标系统是基于微软库的Windows上的可执行环境。交叉编译工具链本身中的实用程序是在MSYS上构建的,但是MSYS不能用于交叉编译的程序.。
需要更多类似Unix环境的应用程序(就像MinGW中包含的实用程序一样)可以使用Cygwin。无论如何,MSYS是Cygwin的叉子。与Cygwin一样,MSYS也提供了自己的库。例如,不仅getuid在那里,而且如果在文件上调用stat,st_uid和st_gid字段将从文件安全描述符中的信息中填充,而MinGW程序使用的函数的Microsoft版本将将这些字段保留为零。必须将MSYS视为与MinGW不同的目标,就像Cygwin一样;将与MinGW一起工作的程序转换为MSYS是一种移植形式。
在我的例子中,所讨论的程序已经针对Cygwin,所以支持MSYS作为目标可能没有什么意义,除非MSYS项目希望将该程序作为MinGW环境的一部分。
https://stackoverflow.com/questions/31885229
复制相似问题