MinGW附带了一个用于制作Windows程序的gcc。因此,例如,它不会编译和链接这个小程序:
collection.find({}).toArray(function(err, docArray){
console.log(docArray);
});
该程序将编译并与MSYS编译器链接,因为MSYS库具有此功能。例如,GNU Coreutils程序#include <unistd.h>
int main(void)
{
uid_t u = getuid(); // no such function in Microsoft library
return 0;
}
可以获取和打印用户ID,以及MinGW中的id
如何打印用户和组ID等等。
唯一的问题是,这个MSYS编译器很旧:gcc 3.4.4。
是否有一个好的,&#34;规范&#34;将MinGW的gcc 4.5.2指向正确的标题和库,以便编译基于MSYS的程序?
或者根本不推荐这条路线;最好从头开始构建一个MSYS gcc4,用MSYS gcc3引导?
答案 0 :(得分:0)
我担心答案是“你可能不想这样做”(因此关于它的信息很少)。 MSYS环境的目的是提供用于构建MinGW程序的实用程序。如果为此目的不需要给定的程序,则不需要为MSYS构建。
换句话说,MinGW有效地提供了交叉编译工具链,其中目标系统是基于Microsoft库的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项目想要将该程序作为MinGW环境的一部分,否则支持MSYS作为目标可能没什么意义。