我安装了Cygwin(CYGWIN_NT-6.1 AlexReynolds-PC 1.7.27(0.271/5/3) 2013-12-09 11:54 x86_64 Cygwin
)和GNU gcc / g ++ 4.8.1。
我正在编译一些使用POSIX C I / O例程的工具,例如fseeko()
并获得以下类型的致命错误:
error: ‘fseeko’ was not declared in this scope
int retValue = fseeko(stream, offset, whence);
在Cygwin上的GNU gcc / g ++ 4.8.1中是否有fseeko()
?是否可以使用可靠地支持64位偏移的替代方案?
答案 0 :(得分:2)
fseeko()
)时可以使用 CYGWIN_NT-6.1-WOW64 1.7.25(0.270/5/3) 2013-08-31 20:39 i686 Cygwin
。但是如果您的安装由于某种原因没有它,那么您有几个选择:
答案 1 :(得分:0)
只需使用fseek。只要你的long是64位,就没有区别。
答案 2 :(得分:0)
在我的情况下,错误是因为我使用--std=c++11
编译了程序。将其更改为--std=gnu++11
修复了编译问题,但现在我想知道我是否应该使用fseeko
。
然后我偷看了Cygwin的/usr/include/stdio.h
并发现了与in this discussion相同的东西。有一个有趣的回答:
10月29日14:32,王宏亮写道:
大家好,
我的平台是WindowsXP + SP2,Cygwin DLL发布版本是1.5.24-2
我试图让我的程序支持大文件,所以在stdio.h中我找到了
356 #ifdef __LARGE64_FILES 357 #if !defined(__CYGWIN__) || defined(_COMPILING_NEWLIB)
但是,当我尝试使用
_COMPILING_NEWLIB
进行编译时,它失败了永远不要那样做。它只应在编译newlib本身时设置。
$ gcc -Wall -D_COMPILING_NEWLIB test.c -o test /cygdrive/c/DOCUME~1/wan/LOCALS~1/Temp/ccUmErSH.o:test.c:(.text+0x3a): undefined reference to `_fopen64' collect2: ld returned 1 exit status
似乎
fopen64
映射到_fopen64
,而后者则缺失。有人能告诉我如何使用
_COMPILING_NEWLIB
标志进行编译或者Cygwin如何支持大文件?不要使用
_COMPILING_NEWLIB
进行编译。 64位文件访问是 Cygwin的自然文件访问类型。off_t
是8个字节。没有 foo64因此而起作用。只需使用fopen
和朋友和你 免费获得64位文件。科琳娜
- Corinna Vinschen请将有关Cygwin的邮件发送给Cygwin Project Co-Leader cygwin AT cygwin DOT com 红帽
所以你有它。