如何让 gcc 写入大于 2.0 GB 的文件?

如何让 gcc 写入大于 2.0 GB 的文件?

我想重新编译“xxd”(用 C 编写),所以我安装了 CodeBlocks 作为 IDE。

一切似乎都很顺利,直到我发现我无法写入超过 2.0 GB 的限制......

我读到过“gcc”需要重新编译...(听起来有点戏剧性。。)
我读到过我可以使用“fread64()”而不是“fread()”...(没有用)
我读过一些关于编译器选项的内容(?)...但我那时迷路了?

我很惊讶它不能开箱即用,因为我认为 2.0 GB 的限制在默认设置下已经成为古老的历史了...又错了?:(

我的操作系统是 32 位的,在 32 位硬件上。gcc
版本报告为:gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

有没有简单的方法解决这个问题?

PS..我被警告:‘info xxd’部分(..仅限于 Linux;)

答案1

一个简单的#定义 似乎满足所有需要...(程序现在写入超过 2 GB。)

也许它不能正确编译的原因是我从一个更大的套件中编译了一个程序(“xxd”是“vim”的一部分)......

如果我完全编译了“vim”,它很可能会运行良好......

因此,对于访问此页面的任何人来说,以下内容可能具有一定的价值:
我认为类似的设置也适用于其他 IDE。

Adding #defines

* Using CodeBocks (as a global setting)
  =====================================
  Settings
    Compiler and Debugger...
      [Compiler Settings]
        [#defines] ... Add the following
         _FILE_OFFSET_BITS="64"

* Using CodeBlocks (for a given Project)
  ======================================
  Properties
    Build Options
      [Compiler Settings]
        [#defines] ... Add the following
         _FILE_OFFSET_BITS="64"

* Directly into gcc's command line
  ================================
  gcc -D_FILE_OFFSET_BITS="64"

* Add a #define directly to the source
  ====================================
  #define _FILE_OFFSET_BITS  64  

另外,我在谷歌搜索解决方案时发现了这个代码片段...
gcc 预定义了哪些宏?...在​​终端中:

  • 触摸 foo.h;cpp -dM foo.h

答案2

我建议添加,-D_GNU_SOURCE只要#include <features.h>使用即可。这将启用所有大文件支持。阅读开头/usr/include/features.h了解更多详细信息:

...
_LARGEFILE_SOURCE    Some more functions for correct standard I/O.
_LARGEFILE64_SOURCE  Additional functionality from LFS for large files.
_FILE_OFFSET_BITS=N  Select default filesystem interface.
....
_GNU_SOURCE      All of the above, plus GNU extensions.

答案3

我遇到了同样的问题——无法写入大于 2GB 的文件。我的操作系统是 64 位,挂载点是 jfs2,并且我的 fsize=-1 我所做的就是将程序中的 fopen 更改为 fopen64,然后就好了!

相关内容