所以,我有一个用例,我需要强制一个C程序交叉编译到Windows,以stdin作为二进制格式读取。这对Windows编译器很有用,但不幸的是我正在使用MinGW编译这个程序,所以我无法访问设置stdin的模式,因为这是一个pre-MSDOS,preUNIX约定。在GCC中编译此代码时,如何强制执行此操作?有什么想法吗?
有问题的陈述如下:
__setmode(__fileno(stdin), O_BINARY);
__setmode(__fileno(stdout), O_BINARY);
答案 0 :(得分:1)
上述语句与编译器无关,而与您链接的头文件和C库无关。
MinGW使用Microsoft运行时库和兼容的头文件。您可能对这些函数的拼写不正确,请尝试删除头文件中的_
,setmode
的grep等等:
grep -r setmode /usr/include
grep -r O_BINARY /usr/include
如果找不到这些,请从微软标题中复制原型和#define
。
cremno建议:
_setmode(_fileno(stdin), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
如果确实找不到这些符号,请尝试以下操作:
extern int _setmode(int, int);
_setmode(0, 0x8000);
_setmode(1, 0x8000);